Java沒有內置字符串類型,而是在標准Java類庫中,提供了一個預定義類,很自然的叫做String。每個用雙引號括起來的字符串都是String類的一個實例
字串
String類的substring
方法可以從一個較大的字符串提取出一個字串。
注釋:類似於C/C++,Java字符串中的代碼單元和代碼點從0開始計數
示例:
String.substring(0,3);//返回一個字符串,為原字符串從0到3,但不包括3的子串
該方法可以較為容易的計算字串長度:例如:3-1=2
程序示例
public class FirstCode1 {
public static void main(String[] args) {
String greeting = "HelloWorld";
String greeter = greeting.substring(3,5);
System.out.println("greeter = "+greeter);
}
}
運行結果
greeter = lo
字符串拼接
Java語言允許使用+號連接(拼接)兩個字符串。
當將一個字符串與一個非字符串進行拼接時,后者會轉換成字符串(任何一個Java對象都可以轉換成字符串)
這種特性通常運用在輸出語句中
示例:
System.out.println("Hello"+3+"World");
如果需要把多個字符串放在一起,用一個界定符分隔,可以使用靜態join方法:
示例:
String all = String.join("\\","S","Hello","World");
在Java11中還有一個repeat方法
示例:
String repeater = "java".repeat(2);//javajava
程序實例
public class FirstCode1 {
public static void main(String[] args) {
//+號字符串連接
String greeting1 = "Hello";
String greeting2 = "World";
System.out.println("greeting3+greeting2 = "+ (greeting1+greeting2));
//join方法
String all = String.join("!","Hello","World","The","China","xiao");
System.out.println("all = "+all);
}
}
運行結果
greeting3+greeting2 = HelloWorld
all = Hello!World!The!China!xiao
不可變字符串
Java中字符串是不可變的
Java的設計者任務共享帶來的高效率遠遠勝過於提取字串,拼接字符串所帶來的低效率。
大多數情況下都不會修改字符串,而只是需要對字符串進行比較(有一種例外情況,將來自於文件或鍵盤的單個字符或較短的字符串組裝成字符串)
Java中的字符串,類似於C/C++中的char指針。
檢測字符串是否相等
equal方法
可以使用equals方法檢測兩個字符串是否相等
示例:
s.equals(t);
如果兩字符串相等,返回true,如果兩字符串不相等,返回false。
equalsIgnoreCase
方法
該方法檢測兩個字符串是否相等(不區分大小寫的情況下)
示例:
s.equalsIgnoreCase(t);
如果兩字符串相等,返回true,如果兩字符串不相等,返回false。
利用==
檢驗字符串相等性的缺點
使用==
只能檢驗出,存儲在同一位置的字符串。如果兩個字符串相同,但是沒有存儲在同一為止,那么使用==
檢測,他就是錯誤的。
千萬不要使用==運算符測試字符串的相等性,以免在程序中出現最糟糕的bug,看起來這種bug就像是隨機產生的間歇性錯誤。
程序實例
public class FirstCode1 {
public static void main(String[] args) {
//equals方法使用
String greet1 = "Hello";
String greet2 = "World";
String greet3 = "Wor"+"ld";
if (greet3.equals(greet2)){
System.out.println("greet2 等於 greet3");
}else {
System.out.println("greet2 不等於 greet3");
}
//equalsIgnoreCase方法使用
String greet4 = "HelloWorld";
String greet5 = "helloworld";
String greet6 = "helloWorld";
if (greet4.equalsIgnoreCase(greet5)){
System.out.println("greet4 等於 greet5");
}else {
System.out.println("greet4 不等於 greet5");
}
if (greet4.equalsIgnoreCase(greet6)){
System.out.println("greet4 等於 greet6");
}else {
System.out.println("greet4 不等於 greet6");
}
if (greet5.equalsIgnoreCase(greet6)){
System.out.println("greet5 等於 greet6");
}else {
System.out.println("greet5 不等於 greet6");
}
//使用“==”檢測字符串是否相等
String greeting1 = "helloworld";
String greeting2 = "hello"+"wor"+"ld";
if (greeting1 == greeting2){
System.out.println("greeting1 等於 greeting2");
}else {
System.out.println("greeting1 不等於 greeting2");
}
}
}
運行結果
greet2 等於 greet3
greet4 等於 greet5
greet4 等於 greet6
greet5 等於 greet6
greeting1 等於 greeting2
空串與Null串
空串
空串“”是長度為0的字符串。可以調用以下代碼檢查一個字符串是否為空:
if(str.length() == 0)
//或者
if(str.equals(""))
空串是一個Java對象,有自己的長度和內容。
null
String變量還可以放一個特殊的值,null,表示目前該變量沒有與任何對象關聯。
判斷一個字符串是否為null
if(str == null)
判斷一個字符串既不是空串也不是null
if(str != null && str.length() != 0)
注意:在null上調用方法會出現錯誤
程序示例
public class FirstCode1 {
public static void main(String[] args) {
//檢驗字符串是否為空
String a1 = "";
if(a1.length() == 0){
System.out.println("a1是空串");
}else {
System.out.println("a1不是空串");
}
if(a1.equals("")){
System.out.println("a1是空串");
}else {
System.out.println("a1不是空串");
}
//檢驗字符串是否為null
String b1 = null;
if (b1 == null){
System.out.println("b1 = null");
}else {
System.out.println("b1 != null");
}
//檢驗字符串不為空且不為null
String c1 = "Hello";
if (c1 != null && c1.length() != 0){
System.out.println("字符串c1既不是空串,也不是null");
}else {
System.out.println("字符串c1可能是空串,也可能是null");
}
}
}
運行結果
a1是空串
a1是空串
b1 = null
字符串c1既不是空串,也不是null
閱讀聯機API文檔
可以從Oracle上下載API文檔,並保存在本地。
也可以在瀏覽器上訪問:http://docs.oracle.com/javase/9/docs/api
構建字符串
有時候需要有較短的字符串拼接成較長的字符串,當數據較多的時候,使用+的效率就有點低了,每次拼接字符串都既浪費空間,又浪費時間。
如果需要用許多小段字符串來構建一個字符串,那么應該按照下列步驟進行
-
構建一個空的字符串構建器:
StringBuilder builder = new StringBuilder();
-
每次需要添加一部分內容時,就調用append方法
builder.append(ch);
-
在字符串構建完成時,調用toString方法,接可以得到一個String字符串,其中包含了構建其中的
String buder = builder.toString();
注釋
StringBuilder類在Java5中引入,這個類的前身是StringBuffer,它的效率稍微有些低,但是允許采用多線程的方式添加或刪除字符串。如果所有字符串編輯操作都在單個線程中執行(通常是這樣),則應該使用StringBuilder
程序示例
public class FirstCode1 {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append("He");
builder.append("llo");
builder.append(",Wor");
builder.append("ld!");
String b1 = builder.toString();
System.out.println(b1);
}
}
運行結果
Hello,World!