JAVA核心技術-字串(附下載連結)
1 字串
java.lang.String
類代表字串,Java程式中的每個用雙引號括起來的字串都被看做是這個類的例項,即便沒有new這個關鍵字,也一樣是String類的物件。需要注意的是,在字串型別中必須注意轉義字元,比如:字串”Java\u2122“,是由5個Unicode字元組成的。
Java字串中的程式碼單元和程式碼點從0開始計數。
1.1 子串
String類的substring方法可以從一個較大的字串中提取出來一個子串。
public String substring(int beginIndex,int endIndex)
引數:beginIndex:複製開始的索引;endIndex:不想複製的第一個位置的索引。
結果:返回一個字串,該字串是此字串的子字串。 子串開始於指定beginIndex
並延伸到字元索引endIndex - 1
。 因此,子串的長度為endIndex-beginIndex
。
關於引數和結果等知識,詳情可以看Java方法有關的章節
String str = "Hello,World";
String s = str.substring(1,4);
/* 建立一個由字元"ell"組成的字串,第一個引數是複製開始的位置,第二個引數是不想複製的第一個位置。
因此這裡要複製的是位於1,2,3這三個位置上的字元。
1.2 拼接
Java語言允許使用+號對兩個字串進行拼接。
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + str2; //str3="HelloWorld"
可以看出+號完全按照給定的次序將兩個字串拼接起來。
當將一個字串與一個非字串的值進行拼接,後者會轉化成字串,這個特性經常會用在輸出語句中。
int x = 2 ;
String y = "AD";
System.out.println(x+y); //列印結果是2AD
如果想把多個字串放在一起,並用一個符號分割,可以使用join
public static String join(CharSequence delimiter,CharSequence... elements)
引數:delimiter:分割每個元素的分隔符;elements:要加入的元素。
結果:返回一個字串,這個字串由delimiter分割elements。
String date = String.join("-","2020","1","31");
System.out.println(date); //列印輸出的結果是2020-1-31
1.3 不可變字串
String類中沒有提供修改某個字元的方法,如果想要修改字串中的內容,不能直接修改字串,但是可以提取想要保留的字串,然後與希望替換的字串拼接。
//把"HelloWorld"替換為”Helwer“
String greeting = "HelloWorld";
System.out.println(greeting.substring(0,3)+"we"+greeting.substring(7,8));
從上述程式碼中我們可以看出通過獲取子串和拼接我們能夠獲得喲個我們想要的字串。因為Java不能修改單個字元,所以String類的物件是不可變的。但是,我們可以修改字串變數,讓它指向另一個字串。這樣做有一個好處,編譯器可以讓字串共享。
所以不可變字串有以下特點:
- 字串的內容永不可變;
- 因為字串是不可變的,所以可以被共享;
- 用substring和+拼接得到的字串不會被共享。
字串常量池:字串常量池在堆中,存放的是程式中直接寫上雙引號的字串,new出來的字串不在常量池中。
注意:對於引用資料型別,不能直接比較大小,"=="進行的是地址值的比較。
此處列印結果為true是因為建立了一個字元串同時共享給兩個變數,這兩個變數存放的地址值相同。
1.4 檢測字串是否相等
可以使用equals方法檢測字串是否相等:
public boolean equals(Object anObject)
引數:需要對比的物件,可以是字串變數,也可以是字串常量。
結果:如果返回true,說明兩個字串對應字元包括大小寫嚴格相等,否則返回值位false。
String greeting = "HelloWorld";
String greeting1 = "helloworld";
boolean b1 = greeting.equals("HelloWorld"); //b1 = true
boolean b2 = "HelloWorld".equals(greeting1); //b2 = false
如果想檢查兩個字串是否相等,而不區分大小寫,可以使用equalsIgnoreCase方法:
public boolean equalsIgnoreCase(String anotherString)
將此String
與其他String
比較,如果兩個字串的長度相同,並且兩個字串中的相應字忽略大小寫依然相等,則兩個字串被認為是相等的。
引數:需要與給定字串比較的字串;
結果:如果返回true,說明兩個字串對應字元忽略大小寫相等,否則返回false。
一定不能用==判斷兩個字串是否相等,實際上,這個運算子只能判斷兩個字串是否放在同一位置,即檢測的是兩個字串的地址值。
1.5 空串與Null串
空串""
是指長度為0的字串,可以使用以下程式碼檢測一個字串是否為空:
if(str.length()==0)
或者str.equals("")
空串是一個Java物件,有自己的長度(0),和內容(空)。
String變數還可以存放一個特殊的值:null,表示目前沒有任何物件與該變數關聯,可以用以下程式碼檢測一個字串是否為null:
if(str==null)
如果想要檢查一個字串既不是null,也不是空串,可以用以下條件:
if(str != null && str.lrngth() != 0)
1.6 構建字串
有時候需要用較短的字串構建字串,例如按鍵或者檔案中的單詞。採用字串拼接的方式達到這個目的,效率會比較低。這時可以用StringBuilder類就可以避免這個問題:
//首先生成一個空的字串構建器
StringBuilder builder = new StringBuilder();
//每次需要新增新內容,呼叫它的append方法
builder.append("Hello");
builder.append("World");
//構建完成呼叫toString方法就可以得到包含了所有輸入字串的字串序列
String str = builder.toString(); //str = "HelloWorld"
1.7 API文件
String類庫中包含了50多個方法,這裡只是列舉出一些常用方法,作為介紹,具體其他的方法請參閱API文件。