字符串类

String类的特性

  • String类是一个final类,不能被继承
  • String类底层是一个final修饰的字符数组,表示不可变的字符序列(final char value[ ])
  • String的不可变性:当String值改变时,会在常量池中创建新的字符串

字符串-创建

  • 字面量方式创建

    String s1="abc"; // s1存储的是 常量池中"abc"的地址

  • new String( ):保存是 堆空间中的地址值


字符串-拼接原则


String 常用方法

查找

  • 获取长度:

    int length( ):返回字符串的长度: return value.length

  • 获取单个字符

    char charAt(int index): 返回某索引处的字符return value[index]

  • 获取第一次出现的索引位置

    int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
    int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始

  • 获取最后一次出现的索引位置

    int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
    int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。

    注:indexOf和lastIndexOf方法如果未找到 都是 返回-1

判断

  • 是否是空字符串

    boolean isEmpty( ):判断是否是空字符串:return value.length == 0

  • 是否包含子字符串

    boolean contains(CharSequence s)

  • 是否以指定的后缀结束

    boolean endsWith(String suffix):此字符串是否以指定的后缀结束

  • 是否以指定的前缀开始

    startsWith(String prefix):此字符串是否以指定的前缀开始

    startsWith(String prefix, int toffset):从指定索引位置,是否以指定前缀开始

比较

  • 比较内容是否相同

    boolean equals(Object obj):比较两个字符串的内容是否相同

    boolean equalsIgnoreCase(String anotherString):忽略大小写,比较内容是否相同

  • 比较大小

    int compareTo(String anotherString):比较两个字符串的大小

转换

  • 大小写转换

    String toLowerCase( ):转换为小写
    String toUpperCase( ):转换为大写

  • 字符串 转 字符数组char[ ]

    调用toCharArray( )方法

  • 字符串 转 字节数组byte[ ]

    调用getBytes( )方法

功能

  • 去掉前后空白

    String trim( ):返回字符串的副本,忽略前导空白和尾部空白

  • 连接字符串

    String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”

  • 截取

    String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
    String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串beginIndex开始截取到endIndex(不包含)的一个子字符串。左闭右开

  • 切割

    String[ ] split(String regex):根据给定正则表达式的匹配拆分此字符串。
    String[ ] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。

  • 替换

    String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
    String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
    String replaceAll(String regex, String replacement): 使 用 给 定 的replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
    String replaceFirst(String regex, String replacement): 使 用 给 定 的replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

  • 匹配正则表达式

    boolean matches(String regex):字符串是否匹配给定的正则表达式


StringBuffer和StringBuilder

StringBuffer扩容原理

  • 字符数组初始的化长度是16
  • 当长度达到16的时候,新的容量是:原长度×2+2
    int newCapacity = (value.length << 1) + 2;
  • 同时调用Arrays.copyOf( )方法,将原数组的元素,复制到新数组中

StringBuffer 常用方法

  • 添加:append( )

  • 删除:delete( )

  • 替换:replace( )

  • 插入:insert( )

  • 查询长度:length( )

  • 查询首次出现的索引位置:indexof(String str)

  • 获取一个字符:charAt( )

  • 修改一个字符:setCharAt( )

  • 字符串反转:reverse( )

  • 截取: substring( )

String、StringBuffer、StringBuilder三者对比

  • Strings是不可变的字符序列,底层是一个final修饰的字符数组。每次改变的时候,在常量池都会创建新的字符串
  • StringBuffer和StringBuilder时可变的字符序列,底层是一个字符数组存储数据。初始化长度是16。当长度达到16时,会扩容为原长度的2倍+2,并且调用Arrays.copyOf( )方法,将原字符数组的元素,复制到新的数组中
  • StringBuilder是线程安全的,StringBuilder是线程不安全的