当对字符串进行修改的时候
需要使用 StringBuffer
和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类
的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer
之间的最大不同在于 StringBuilder 的方法不是线程安全
的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,
所以多数情况下建议使用 StringBuilder 类。
***然而在应用程序要求线程安全的情况下,
则必须使用 StringBuffer 类。***
Java中的append( )方法
其实是创建了一个新的数组,扩大了长度,将需要添加的字符串给zhi复制到这个新的数组中。
JAVA中Stringbuffer有append( )方法:
而Stringbuffer是动态字符串数组,append( )是往动态字符串数组添加,跟“xxxx”+“yyyy”相当‘+’号。
跟String不同的是Stringbuffer是放一起的,String1+String2
和Stringbuffer1.append("yyyy")虽然打印效果一样,
但在内存中表示却不一样
String1+String2 存在于不同的两个地址内存,
Stringbuffer1.append(Stringbuffer2)放再一起。
StringBuffer是线程安全的,多用于多线程。
class Solution {
public String compressString(String S) {
int N=S.length();
int i=0;
StringBuilder sb = new StringBuilder();
while(i<N)
{
int j=i;
while(j<N && S.charAt(j)==S.charAt(i))
{
j++;
}
sb.append(S.charAt(i));
sb.append(j-i);
i=j;
}
String res = sb.toString();
if(res.length()<S.length())
{
return res;
}
else
{
return S;
}
}
}