字串
在Java程式設計中廣泛使用的字串是一系列字元,在Java程式語言中,字串是物件。
Java平臺提供String類來建立和操作字串。
建立字串
建立字串的最直接方法是編寫:
String greeting = "Hello world!";
在這種情況下,"Hello world!"
是一個字串文字 — 程式碼中的一系列字元,用雙引號括起來,每當它在程式碼中遇到字串文字時,編譯器就會建立一個帶有其值的String
物件 — 在本例中為Hello world!
。
與任何其他物件一樣,你可以使用new
關鍵字和建構函式建立String
物件,String
類有13個建構函式,允許你使用不同的源提供字串的初始值,例如字元陣列:
char[] helloArray = { `h`, `e`, `l`, `l`, `o`, `.` };
String helloString = new String(helloArray);
System.out.println(helloString);
此程式碼段的最後一行顯示hello.
。
注意:
String
類是不可變的,因此一旦建立,就無法更改String
物件,String
類有許多方法,其中一些將在下面討論,似乎可以修改字串,由於字串是不可變的,因此這些方法真正做的是建立並返回包含操作結果的新字串。
字串長度
用於獲取物件資訊的方法稱為訪問器方法,可以與字串一起使用的一種訪問器方法是length()
方法,它返回字串物件中包含的字元數,在執行以下兩行程式碼後,len
等於17
:
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
palindrome
是一個對稱的單詞或句子 — 它向前和向後拼寫相同,忽略大小寫和標點符號,這是一個簡短而低效的程式來反轉palindrome
字串,它呼叫String
方法charAt(i)
,它返回字串中的第i
個字元,從0開始計數。
public class StringDemo {
public static void main(String[] args) {
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
char[] tempCharArray = new char[len];
char[] charArray = new char[len];
// put original string in an
// array of chars
for (int i = 0; i < len; i++) {
tempCharArray[i] =
palindrome.charAt(i);
}
// reverse array of chars
for (int j = 0; j < len; j++) {
charArray[j] =
tempCharArray[len - 1 - j];
}
String reversePalindrome =
new String(charArray);
System.out.println(reversePalindrome);
}
}
執行該程式會產生以下輸出:
doT saw I was toD
要完成字串反轉,程式必須將字串轉換為字元陣列(第一個for
迴圈),將陣列轉換為第二個陣列(第二個for
迴圈),然後再轉換回字串,String
類包含一個方法getChars()
,用於將字串或字串的一部分轉換為字元陣列,因此我們可以在上面的程式中替換第一個for
迴圈:
palindrome.getChars(0, len, tempCharArray, 0);
連線字串
String類包括用於連線兩個字串的方法:
string1.concat(string2);
這將返回一個新字串,該字串為string1
,並在末尾新增了string2
。
你還可以將concat()
方法與字串文字一起使用,如下所示:
"My name is ".concat("Rumplestiltskin");
字串通常使用+
運算子連線,如:
"Hello," + " world" + "!"
結果是:
"Hello, world!"
+
運算子廣泛用於列印語句,例如:
String string1 = "saw I was ";
System.out.println("Dot " + string1 + "Tod");
這將列印:
Dot saw I was Tod
這種連線可以是任何物件的混合,對於不是String
的每個物件,呼叫其toString()
方法將其轉換為String
。
注意:Java程式語言不允許文字字串跨越原始檔中的行,因此必須在多行字串中的每行末尾使用+
連線運算子,例如:
String quote =
"Now is the time for all good " +
"men to come to the aid of their country.";
使用+
連線運算子在行之間斷開字串在print
語句中非常常見。
建立格式字串
你已經看到使用printf()
和format()
方法來列印帶有格式化數字的輸出,String
類有一個等效的類方法format()
,它返回一個String
物件而不是一個PrintStream
物件。
使用String
的static format()
方法可以建立一個可以重用的格式化字串,而不是一次性列印語句,例如替換:
System.out.printf("The value of the float " +
"variable is %f, while " +
"the value of the " +
"integer variable is %d, " +
"and the string is %s",
floatVar, intVar, stringVar);
你可以這樣寫:
String fs;
fs = String.format("The value of the float " +
"variable is %f, while " +
"the value of the " +
"integer variable is %d, " +
" and the string is %s",
floatVar, intVar, stringVar);
System.out.println(fs);
字串總結
字串是一系列字元,廣泛用於Java程式設計,在Java程式語言中,字串是物件,String類有60多個方法和13個建構函式。
最常見的情況是,建立一個帶有如下語句的字串:
String s = "Hello world!";
而不是使用其中一個String
建構函式。
String類有許多方法可以查詢和檢索子字串,然後可以使用+
連線運算子輕鬆地將它們重新組合成新的字串。
String類還包括許多實用方法,其中包括split()
、toLowerCase()
、toUpperCase()
和valueOf()
。後一種方法在將使用者輸入字串轉換為數字時是必不可少的,Number
子類還具有將字串轉換為數字的方法,反之亦然。
除了String
類之外,還有一個StringBuilder類,使用StringBuilder
物件有時比使用字串更有效,StringBuilder
類提供了一些對字串有用的方法,其中包括reverse(),但是,通常,String
類具有更廣泛的方法。
可以使用StringBuilder
建構函式將字串轉換為字串構建器,可以使用toString()
方法將字串構建器轉換為字串。