(010) java後臺開發之String字串操作
先看一個例子:
-
String str1; String str2 = ""; String str3 = new String();
str1
的值為null
,表示沒有指向任何字串物件str2
已經指向了一個字串物件,這個物件的字元序列內容為空str3
是顯式地呼叫建構函式建立字串物件,該物件的字元序列內容為空,與第二行程式碼是基本一樣的。
String
有一個format
方法,類似於C語言中printf()
風格的格式化輸出,這使得我們對輸出格式的控制更加容易。
String的format方法
比如有三個變數:
String name = "David";
int age = 18 ;
String hobby = "籃球";
format
方法可以這樣寫:
String formatString = "我的名字是%s,我今年%d歲,我的愛好是%s";
String output = String.format(formatString, name, age, hobby);
System.out.println(output);
你也可以直接使用System.out.format
函式,引數簽名和意義是完全一樣的,所不同的是這個函式直接將格式化的字串輸出:
String formatString = "我的名字是%s,我今年%d歲,我的愛好是%s";
System.out .format(formatString, name, age, hobby);
其中的%s
和%d
表示將會用字串和整數的值來替代它們。
以下為常見的格式化字元
字元 | 用以格式化的資料型別 |
---|---|
d | 整數型(10進位制 ) |
c | Unicode字元 |
b | Boolean值 |
s | String |
f | 浮點數(10進位制) |
e | 浮點數(科學計數) |
x | 整數(16進位制) |
String str1 = "abcabcabcxyz";
String str2 = str1.replace("abc", "x");
System.out.println(str2);
String str3 = str2.replace("x","ggg");
System.out.println(str3);
// trim()把字串前後的空格都刪除,方法對於清除額外的空字元非常有用:
String str4 = " a bc ";
String str5 = str4.trim();
System.out.println(str5);
String str6 = str4.replace(" ", ""); // 去掉所有空格,包括首尾、中間
System.out.println(str6);
StringBuffer
的許多方法和String
的區別
StringBuffer
表示表示可變長的和可修改的字元序列。我們可以StringBuffer
進行插入或者追加字元序列、翻轉字元序列等操作。
StringBuffer
必須通過建構函式進行初始化,它有三個構造方法:
StringBuffer()
:預設的構造方法預留16個字元的空間StringBuffer(int size)
:第二種形式接收一個整數引數,顯示的設定緩衝區的大小StringBuffer(String str)
:第三種形式接收一個String
引數,設定StringBuffer
物件的初始內容,同時多預留16個字元的空間
StringBuffer
的許多方法和String
類都差不多,功能幾乎一模一樣。
String
型別和StringBuffer
型別的主要區別其實在於String
是不可變的物件,
因此在每次對String
物件進行改變的時候其實都會生成一個新的String
物件。所以經常改變內容的字串最好不要用String
,因為每次生成物件都會對系統性能產生影響。
使用StringBuffer
類則會對StringBuffer
物件本身進行操作,而不是生成新的物件。所以在一般情況下我們推薦使用StringBuffer
,特別是字串物件經常改變的情況下。StringBuffer
類的操作效能要優於String
。
瞭解了這個區別,我們也應該比較明確兩者的使用場景了。
- 使用
String
的場景:在字串不經常變化的場景中可以使用String
類,例如常量的宣告、少量的變數運算。 - 使用
StringBuffer
類的場景:在頻繁進行字串運算(如拼接、替換、刪除等),並且執行在多執行緒環境中,則可以考慮使用StringBuffer
,例如XML解析、HTTP引數解析和封裝。