本文目录一览:
JAVA编程对字符串操作
package myPrac;
public class StringTest {
public static void main(String[] args){
String str = "aaabbdddfffcccdf"; //初始字符串
StringBuilder temp = new StringBuilder(); //存放连续相同字符
StringBuilder result = new StringBuilder(); //存放转化后的字符串
char ch = '#'; //用来存放当前比较的字符
for(int i = 0; i str.length();i++){
if(ch == '#'){
//第一次循环,第一个字符与#不同
ch = str.charAt(i);
temp.append(str.charAt(i));
}else{
//如果相同 继续添加
if(ch == str.charAt(i)){
temp.append(str.charAt(i));
}else{
//不同进行处理
result.append(temp.length()); //相同字符数量
result.append(temp.charAt(0)); //字符
temp.delete(0, temp.length()); //temp重置
temp.append(str.charAt(i)); //当前字符放入ch
ch = str.charAt(i);
}
}
}
System.out.println(result.toString());
}
}
Java中如何高效的拼接字符串
String类的方法:
①利用运算符"+"
②public String concat(String str)进行字符串的拼接操作
StringBuffer的方法:
①public StringBuffer append(String str)将str添加到当前字符串缓冲区的字符序列的末尾
②public StringBuffer insert(int offset,String str)在当前字符串缓冲区的字符序列的下标
索引offset插入str。如果offset等于旧长度,则str添加在字符串缓冲区的尾部
如图所示
java 如何提高字符串拼接速度
应该使用
StringBuilder
为什么不用
StringBuffer,因为StringBuffer的每一次操作之前都要取得同步锁,每一次操作之后都要释放同步锁。
看下面这个例子:
for(int
i=0;
i10000;
i++)
buffer.append(i).append(",
");
这里获取了10000次锁,释放了10000次锁,那么,它真的实现了同步的目的吗?如果在这个循环运行过程中,有另一个进程对buffer进行了这样的操作:
buffer.append("some
string");
那么这个"some
string"
会被插入到某两个数字之间,如果你想要前面那个for循环不受干扰地完成,还是要在外面加锁:
synchronized(buffer)
{
for(int
i=0;
i10000;
i++)
buffer.append(i).append(",
");
}
所以StringBuffer这个类的设计是有缺陷的,是由于当时受限于人们对API设计理论的理解,类的设计者不明白这样一个道理:一个类不应该自己实现同步,而应该把同步的工作交给用户,因为“用户对于什么时候应该同步,应该怎么同步,通常比类的设计者知道得更清楚,并且在不同的环境下用户可能对如何同步有不同的需求”。
所以在新的代码中应该尽量用
StringBuilder
而不要用
StringBuffer。
同理,应该用
ArrayList
而不要用
Vector。