本文目錄一覽:
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。
原創文章,作者:RBYI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135112.html