【JAVA零基礎入門系列】Day6 Java字符串

  字符串,是我們最常用的類型,每個用雙引號來表示的串都是一個字符串。Java中的字符串是一個預定義的類,跟C++ 一樣叫String,而不是Char數組。至於什麼叫做類,暫時不做過多介紹,在之後的篇章中會有關於類的詳細介紹,在這裏,只需要將類理解爲一個模具,就像做月餅那樣,想要什麼外觀的月餅,就選用相應的模具一壓,再往烤箱裏一放,便能得到我們想要的月餅。用同一個模具所做出來的月餅基本是一樣的。當然,這個比喻並不十分恰當,不過就目前而已,它是有效的。聲明一個String類型的變量之後,這個變量便是String類型的一個實例,就好比模具做出來的月餅,而且能使用String類型的所有方法,也具有了String的所有屬性。

  String這個類有一些基本的方法,如取子串,拼接,檢測是否相等 等一些常用的API。字符串處理將是我們經常用到的,所以String的熟練使用將是不可或缺的。話不多說,我們直接上代碼實操。

  新建項目的方法,我就不再多說了。代碼如下:

複製代碼
 1 package pers.frank.test;
 2 
 3 public class Test {
 4     public static void main(String[] args){
 5         String str = "我愛Java!!!";
 6         String str1 = str.substring(0,4);
 7         System.out.println("str1:"+str1);
 8 
 9         String str2 = str + "但我也愛C++。";
10         System.out.println("str2:"+str2);
11 
12         String str3 = "我愛Java!!!";
13         System.out.println(str3.equals(str));
14         System.out.println(str == str3);
15         System.out.println(str.length());
16         System.out.println(str.charAt(0));
17         System.out.println(str.charAt(2));
18         System.out.println(str.charAt(4));
19 
20         String str4 = "我愛JavaScript!!!";
21         System.out.println(str4.substring(0,4) == str1);
22     }
23 }
複製代碼

 

  第5行定義了一個字符串變量str,並給它初始化賦值。第六行,調用了String的substring方法,取了前四個字符,這個方法一共兩個參數,第一個參數代表想要取的第一個字符的位置,從0開始,第二個字符代表第一個不想取的字符的位置。所以str.substring(0,4)即取字符串str的前四個字符。

  第9行定義了str2,初始化的時候將str與字符串“但我也愛C++。”用“+”號拼接了起來,組成了新的字符串。

  第12行定義了str3,同樣初始化賦值爲“我愛Java!!!”,String的equals方法用於判斷兩個字符串的內容是否相同,因爲調用str3.equals(str)時,會返回true,注意,判斷兩個字符串是否相同時不要使用“==”,雖然在某些情況下,使用等號判斷可以順利執行,但並非所有情況都如此。使用“==”號判斷時,判斷的是兩個字符串變量是否同時指向同一個字符串常量,而不是比較它們的內容。String在這裏更像是char*,字符串變量並沒有真正存儲字符串的內容,而是存儲它們在內存中的位置,就像戶口登記簿上寫的是你家的地址,而不是把你家搬到登記簿裏面去。用等號判斷的時候,比較的是登記薄上記載的內容是否相同,而用equals方法比較的是兩個地址指向的房子是否相同(可以不是同一棟房子)。在Java中,字符串常量都是被單獨存放在內存空間的,在聲明str和str2的時候,會新建兩個字符串常量並存儲在內存空間,然後把它們在內存空間的地址賦值給這兩個變量。在聲明str3的時候,並沒有新建新的字符串常量,因爲Java編譯器會讓字符串常量共享,所以實際上str3跟str指向的是同一個地址。這時使用等號來判斷兩者是否相等時可以得到正確的結果。但並不適用所有情況,如果再聲明一個字符串變量str4,賦值爲“我愛JavaScript!!!”,再調用substring方法跟str1用等號進行比較時,就不能得到正確的結果了。

  第15行調用的是length方法,返回字符串的長度。

  第16-18行調用charAt方法,返回的是第幾個位置上的字符。以下是運行結果:

  

  因爲java中的字符串都是Unicode字符,所以這裏的字符概念跟某語言中的字符概念不太一樣,既然說到了這裏,那就順便再詳細的說明一下相關的概念。

  字符是抽象的最小文本單位。它沒有固定的形狀(可能是一個字形),而且沒有值。“A”是一個字符,“€”(德國、法國和許多其他歐洲國家通用貨幣的標誌)也是一個字符。 

  字符集是字符的集合。例如,漢字字符是中國人最先發明的字符,在中文、日文、韓文和越南文的書寫中使用。

  編碼字符集是一個字符集,它爲每一個字符分配一個唯一數字。Unicode 標準的核心是一個編碼字符集,字母“A”的編碼爲 004116 和字符“€”的編碼爲20AC16.Unicode 標準始終使用十六進制數字,而且在書寫時在前面加上前綴“U+”,所以“A”的編碼書寫爲“U+0041”。

  代碼點是指可用於編碼字符集的數字。編碼字符集定義一個有效的代碼點範圍,但是並不一定將字符分配給所有這些代碼點。有效的 Unicode 代碼點範圍是 U+0000 至 U+10FFFF.Unicode 4.0 將字符分配給一百多萬個代碼點中的 96382 代碼點。

  再細說可能就要說到具體的編碼上來了,由於不是本篇重點,所以還是不做過多介紹了,之後會有文章專門介紹。

  關於String的方法很多,但常用的並不多,這裏不全部介紹,想要了解的話可以在這裏查看:http://www.runoob.com/java/java-string.html

  暫時不需要全部記住,只要知道有那麼個函數,就可以實現那樣的功能就好了,以後的多碼代碼自然能夠記住了。

  最後,再介紹一個叫做StringBuilder的類。這個類是幹嘛用的呢?主要用於多字符串的拼接和處理。那你可能會問了,既然用“+”會把兩個字符串拼接起來,爲啥還要這個類呢?事實上,每次聲明一個新字符串變量並賦上初值的時候,如果該字符串常量不存在,則會新建一個字符串常量並存儲,就像上面聲明str2的時候,會新建一個字符串對象“我愛Java!!!但我也愛C++。”而不是簡單的將“但我也愛C++。”加在str後面,而且如果有多次拼接,特別是在循環中使用的時候,這種方式無疑會浪費很多空間,我們需要的只是最後的字符串,而不是過程中間的產生的字符串,所以過程中生成的字符串對象並沒有存儲的必要,對程序而言便是存儲上的浪費,這個時候StringBuilder就產生了,可以調用它的append方法來拼接字符串,這樣可以節省很多不必要浪費的空間。

  事實上,如果你有了解過C或者C++的話,對char[]應該比較熟悉,StringBuilder內部便是有一個自己維護的char數組,通過動態申請內存方式進行拼接和處理。

  StringBuilder常用的方法如下:

  同樣不需要全部死記硬背,在之後的練習中多加使用便能熟練掌握。

  至此,字符串的講解告一段落,歡迎大家繼續關注!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章