[Java基础]——String类

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

[Java基础]——String类

编程达人-野比大雄   2021-01-11 我要评论

  此篇博客主要整理Java中的String类的使用。

  一、String

    1.1  String 的定义

  

 

 

  

 

 

 

 

   上图是jdk中对String类的定义,得到的信息有:

  ①、String类声明为final的,不可被继承。

  ②、String类实现了Serializable接口,表示字符串是支持序列化的(IO流中使用)。

                    实现了Comparable接口,表示String是可以比较大小的。

  ③、String内部定义了final char[ ] value 有用于存储字符串数据。

  ④、String 代表了不可变的字符序列,简称:不可变性。

              体现: a.对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。

                          b.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

                          c.当调用String的replace() 方法进行修改指定字符串时,也需要重新指定内存区域。

  ⑤、通过字面量的方式(区别于new)给一个字符串进行赋值,此时的字符串声明在字符串常量池中。

  ⑥、字符串常量池中是不会存储相同内容的字符串的。(体现:定义两个值相同的字符串变量,用“==”判断,返回true)

 

  1.2  String 实例化的方式

   

 

 

     

 

 

    

 

 

 

 

    说明:使用字面量定义的方式都存储到常量池中, 常量池中不存储重复的内容,所以s1和s2指向的地址是同一个。

                      使用new + 构造器的方式,是数据在堆空间中开辟新空间s3 和s4的地址值不同。

 

 

     

 

    小练习:

      

 

 

 

    说明:因为s4被定义为final ,即定义为常量。s1在常量池,s5 也在常量池,地址相同,==为true

 

  1.3 String 的常用方法

  1.   int   length()  :  返回字符串长度  return value.length。
  2.   char  charAt ( int index)  :  返回某处索引的字符  return value[index]。
  3.   boolean  isEmpty( )  :   判断是否为空字符串  return value.length == 0。
  4.   String  toLowerCase( )  :  使用默认语言环境,将 String 中的所有字符转换为小写。
  5.   String  toUpperCase( )  :  使用默认语言环境, 将 String 中的所有字符转换成大写。
  6.   String  trim( )  :  返回字符串的副本, 忽略前导空白和尾部空白。
  7.   boolean  equals( Object  obj )  :  比较两个字符串的内容是否相同。
  8.        boolean  equalsIgnoreCase( String anotherString )  :  与equals 方法类似,忽略大小写。
  9.        String  concat( String  str )  :  指定字符串连接到此字符串的尾部, 等价与使用 “+”。
  10.        int  compareTo( String anotherString )  :  比较两个字符串大小。
  11.        String  substring( int beginIndex )  :  返回一个新的字符串,它是此字符串的从beginIndex开始截取的字符串。
  12.        String  substring( int beginIndex ,   int  endIndex )  : 返回一个新的字符串,从beginIndex开始截取,从endIndex(不含)结尾。
  13.        boolean  endsWith( String  suffix)  :  测试此字符串是否以指定的后缀结束。
  14.        boolean  startWith( String  prefix)  :  测试此字符串是否以指定的前缀开始。
  15.        boolean  startWith( String prefix,  int  toffset )  :  测试此字符串从指定索引开始的子字符串是否以指定前缀 开始。
  16.        boolean  contains(CharSequence  s)  :  当且仅当此字符串包含指定的char 值序列时,返回true。
  17.        int  indexOf( String str)  :  返回指定字符串在此字符串中第一次出现处的索引。找不到返回 -1。
  18.        int  indexOf( String  str,  int  fromIndex)  :  返回指定字符串在此字符串中第一次出现的索引,从指定的索引开始。
  19.        int  lastIndexOf( String str, int fromIndex)   :  返回指定字符串在此字符中最右边出现的索引。找不到返回 -1。
  20.        int  lastIndexOf( String str,  int  fromIndex)   :  返回指定字符串在此字符串中最后一次出现处的索引, 从指定的索引开始反向搜索。
  21.        String  replace( char  oldChar,  char  newChar)  :  返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar得到。
  22.        String  replace( CharSequence target,  CharSequence  raplacement)  :  使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
  23.        String  replaceAll( String  regex,  String  replacement)  :  使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
  24.        String  replaceFist( String  regex, String  replacement)  :  使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。
  25.        boolean  matches( String  regex)  :  告知此字符串是否匹配给定的正则表达式。
  26.        String[ ]  split( String  regex)  :  根据给定正则表达式是否匹配拆分此字符串。
  27.        String[ ]  split( String  regex,  int  limit)  : 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部放到最后一个元素中。     

 

  1.4、String 与其他结构之间的转换

  1. 字符串  --> 基本的数据类型、包装类

    方法:调用包装类的静态方法: parse×××(str)

    Integer包装类的public static int parseInt( String s): 可以将有“数字”字符组成的字符串转换成整型

    例子:String  str  =  "123";

       int  num = (int) str ;  //强转是错误的,子父类关系才能强转

       int  num  = Integer.parseInt(str1);

  2. 基本数据类型、包装类  --> 字符串

    方法:调用String  重载的valueOf(×××)

    例子: String  str2 = String.valueOf(num);   / /"123"

                          或者更简便的方法: String str3 = num + "" ; / /  "123"

  

  1.5 String 与字符数组之间的转换

  1. String -->  char[ ]

    方法:调用String 的 toCharArray( )

    例子:String str1 = "abc123";

                         char[ ]  charArray = str1.toCharArray( );

  2. char[ ]  -->  String

    方法:调用String 的构造器

    例子:char[ ]  arr = new char[ ] {'h', 'e', 'l', 'l', 'o'};

                         String str2 = new  String(arr);

  

  1.6 String 与 字节数组之间的转换

  1. String  --> byte[ ]

    方法:调用 String 的getBytes( )

    例子:String  str1 = "abc123中国";

                         byte[ ]  bytes = str1.getBytes( ); //构造器可以空参就是默认,可以带参“gbk”编码等

                         System.out.println(Arrays.toString(bytes)); // [97, 98, 99, 49, 50, -28, -72, -83, -27, -101, -67]

               说明: 使用默认集编进行转换,英文、数字是ascii码, 汉字编译器默认utf-8,一个汉字三个字节

  2. byte[ ]  -->  String

    方法:调用String的构造器

    例子: String str2 = new String(bytes);

                          //如果不是默认编码,使用 String str3 = new String(bytes, "gbk");  //gbk只是一种编码方式

  

  1.7  StringBuffer类与Stringbuilder类

    String、StringBuffer、StringBulider三者的异同?

    String: 不可变的字符序列,底层使用 char[ ] 存储

    StringBuffer: 可变的字符序列,线程安全的,效率低, 底层使用char[ ]存储

    StringBuilder: 可变的字符序列,线程不安全,效率高, 底层使用char[ ]存储(不涉及多线程多使用此类)

    说明:String不可变因为底层的char[ ] 长度就是字符串的长度。

                         StringBuffer与StringBuilder底层使用char[16]数组,使用完扩容为原来的2倍+2。

    常用方法:

    append(×××):用于字符串的拼接

    delete( int start, int end) : 删除指定位置的内容

    replace( int start, int end, String str)  :  把[start, end) 位置替换为str

    insert( int offset, ×××)  :  在指定位置插入×××

    reverse(): 把当前字符序列逆转

    int  indexOf(String str)  :  返回子一个字串出现的位置

    String  substring(int start, int end)  :  返回一个从start开始 end索引结束的左闭右开的区间

    int  length( ) :长度

    char charAt( int n )  :   返回指定位置的字符

    void  setCharAt(int n,  char  ch)  :  将指定字符位置改成新的

    

    总结:

    增:append(×××)

    删:delete( int start, int end)

    改:setCharAt( int n,  char  ch)  /  replace(int  start,  int  end,  String  str)

    查:charAt( int n)

    长度:length()

    遍历:for( ) + charAt( )  /  toString( )

    

       

 

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们