1. 程式人生 > 其它 >Java字串的基本操作

Java字串的基本操作

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

構建字串

有時候需要有較短的字串拼接成較長的字串,當資料較多的時候,使用+的效率就有點低了,每次拼接字串都既浪費空間,又浪費時間。


如果需要用許多小段字串來構建一個字串,那麼應該按照下列步驟進行

  1. 構建一個空的字串構建器:

    StringBuilder builder = new StringBuilder();
  2. 每次需要新增一部分內容時,就呼叫append方法

    builder.append(ch);
  3. 在字串構建完成時,呼叫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!