String、StringBuilder和StringBuffer大总结

  • 和String类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
  • StringBuffer线程安全,而 StringBuilder 方法不是线程安全的(不能同步访问)。 StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰
    *单线程程序下, StringBuilder 相较于 StringBuffer 有速度优势,它不需要加锁,不具备多线程安全;而StringBuffer则每次都需要判断锁,效率相对更低所以多数情况下建议使用 StringBuilder 类。运行速度快慢为:StringBuilder > StringBuffer > String

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

在这里插入图片描述

Java String类

  • String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。String类有11钟构造方法,比如可以提供一个字符数组参数初始化字符串。
  1. 用于获取有关对象的信息的方法称为访问器方法。
    返回字符串对象包含的字符数:length() 方法
  2. 连接两个字符串的方法:string1.concat(string2);更常用的是使用’+'操作符来连接字符串
  3. 输出格式化数字可以使用 printf() 和 format() 方法。String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
  4. String 类支持的方法可参看 Java String API 文档:http://www.runoob.com/manual/jdk1.6/java/lang/String.html
SN(序号) 方法描述
1 char charAt(int index)
返回指定索引处的 char 值。
2 int compareTo(Object o)
把这个字符串和另一个对象比较。
3 int compareTo(String anotherString)
按字典顺序比较两个字符串。
4 int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
5 String concat(String str)
将指定字符串连接到此字符串的结尾。
6 boolean contentEquals(StringBuffer sb)
当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。
7 static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
8 static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
9 boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
10 boolean equals(Object anObject)
将此字符串与指定的对象比较。
11 boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
12 byte[] getBytes()
 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
13 byte[] getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
14 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
15 int hashCode()
返回此字符串的哈希码。
16 int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
17 int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18 int indexOf(String str)
 返回指定子字符串在此字符串中第一次出现处的索引。
19 int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20 String intern()
 返回字符串对象的规范化表示形式。
21 int lastIndexOf(int ch)
 返回指定字符在此字符串中最后一次出现处的索引。
22 int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23 int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
24 int lastIndexOf(String str, int fromIndex)
 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25 int length()
返回此字符串的长度。
26 boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
27 boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
28 boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
29 String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
30 String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
31 String replaceFirst(String regex, String replacement)
 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
32 String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
33 String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
34 boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
35 boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36 CharSequence subSequence(int beginIndex, int endIndex)
 返回一个新的字符序列,它是此序列的一个子序列。
37 String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
38 String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
39 char[] toCharArray()
将此字符串转换为一个新的字符数组。
40 String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
41 String toLowerCase(Locale locale)
 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
42 String toString()
 返回此对象本身(它已经是一个字符串!)。
43 String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
44 String toUpperCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
45 String trim()
返回字符串的副本,忽略前导空白和尾部空白。
46 static String valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。

StringBuilder方法

  • 字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生

  • 创建Stringbuilder对象

    StringBuilder strB = new StringBuilder();

  • 方法,和后面的StringBuffer类似

  1. append(String str)/append(Char c):字符串连接

    System.out.println(“StringBuilder:”+strB.append(“ch”).append(“111”).append(‘c’));
    //return “StringBuilder:ch111c”

  2. toString():返回一个与构建起或缓冲器内容相同的字符串

    System.out.println(“String:”+strB.toString());
    //return “String:ch111c”

  3. appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this

    System.out.println(“StringBuilder.appendCodePoint:”+strB.appendCodePoint(2));
    //return “StringBuilder.appendCodePoint:ch111c”

  4. setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)

    strB.setCharAt(2, ‘d’);
    System.out.println(“StringBuilder.setCharAt:” + strB);
    //return “StringBuilder.setCharAt:chd11c”

  5. insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)

    System.out.println(“StringBuilder.insertString:”+ strB.insert(2, “LS”));
    //return “StringBuilder.insertString:chLSd11c”
    System.out.println(“StringBuilder.insertChar:”+ strB.insert(2, ‘L’));
    //return “StringBuilder.insertChar:chLLSd11c”

  6. delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串

    System.out.println(“StringBuilder.delete:”+ strB.delete(2, 4));
    //return “StringBuilder.delete:chSd11c”

StringBuffer方法

更详细可参考:https://www.cnblogs.com/skywang12345/p/string03.html

  • 在这里插入图片描述
  • StringBuffer对象和String对象之间的互转的代码如下:
    String s = “abc”;
    StringBuffer sb1 = new StringBuffer(“123”);
    StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
    String s1 = sb1.toString(); //StringBuffer转换为String
  • StringBuffer初始化及扩容机制
  1. StringBuffer()的初始容量可以容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增加。StringBuffer对象可以通过length()方法获取实体中存放的字符序列长度,通过capacity()方法来获取当前实体的实际容量。

  2. StringBuffer(int size)可以指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增加。以便存放所增加的字符。

  3. StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增加,以便存放所增加的字符。

  • 方法:偏重于对于字符串的变化,例如追加、插入和删除等
  1. append方法:追加内容到当前StringBuffer对象的末尾,类似于字符串的连接在这里插入图片描述
  2. deleteCharAt方法:该方法的作用是删除指定位置的字符
  3. insert方法:该方法的作用是在StringBuffer对象中插入内容
  4. reverse方法:该方法的作用是将StringBuffer对象中的内容反转。
  5. setCharAt方法:该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。
  6. trimToSize方法:该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
  7. replace方法
  8. toString方法在这里插入图片描述
public StringBuffer append(boolean b)
//
public StringBuffer deleteCharAt(int index)
//
public StringBuffer delete(int start,int end)
//
public StringBuffer insert(int offset, boolean b)
//
public StringBuffer reverse()
//
public void setCharAt(int index, char ch)
//
public void trimToSize()
//
synchronized StringBuffer replace(int start, int end, String string)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值