1、字符串
Java 字符串就是 Unicode 字符序列
Java 沒有內置的字符串類型,所以在標準 Java 類庫中提供了一個預定義類,叫做 String。
每個用雙引號括起來的字符串都是 String 類的一個實例:
String e = "";//an empty string
String greeting = "Hello";
2、子串
- 可以使用 substring 方法,兩個參數分別是起始位置,包前不包後。
String greeting = "Hello";
String s = greeting.substring(0, 3);
System.out.println(s);// 輸出Hel,子串長度爲 3-0=3
- 使用 substring 的一個優點,容易計算子串的長度。
3、拼接
- Java 語言可以使用 + 號進行字符串拼接,但有更好的方式,後續再討論。
4、不可變字符串
坑:String類沒有提供用於修改字符串的方法!
- 所以想將字符串 “Hello” 修改爲 “Help” ,要這樣寫:
String greeting = "Hello";
greeting = greeting.substring(0, 3) + "p";
System.out.println(greeting);// 輸出Help
- 不可變字符串的優點:編譯器可以讓字符串共享,如果複製一個字符串變量,原始字符串與複製的字符串共享相同的字符。
- Java 的設計者認爲共享帶來的高效率遠遠勝過提取、拼接字符串所帶來的低效率。
String greeting = "Hello";
//有人將 Java 字符串看做是字符串數組,像下面這樣:
char greeting[] = "hello";
//這種認識是錯誤的,其實 Java 字符串更加像 char* 指針:
char* greeting = "hello";
//當採用另一個字符串替換 greeting 的時候, Java 代碼主要進行下列操作:
char* temp = malloc(6);
strncpy(temp,greeting,3);
strncpy(temp + 3,"p!",3);
5、字符串相等
判斷是否是本身使用 == ,判斷是否相等使用 equals
- s.equals(t) , s 和 t 可以是字符串變量,也可以是字符串常量
String greeting = "Hello";
System.out.println("Hello".equals(greeting));// true
System.out.println("hello".equalsIgnoreCase(greeting));// true,忽略大小寫差別
- 工作中不要使用 == 運算符檢測字符串的相等性,以免程序中出現糟糕的 bug ,從表面上看,這種 bug 很像隨機產生的間歇性錯誤。
- C++ 的 string 類重載了 == 運算符,但 Java 並沒有這麼做。
6、空串和 Null 串
- null 串表示目前沒有任何對象與該變量關聯
- 空串是一個 Java 對象,有自己的串長度(0)和內容(空)
- 要檢查一個字符串既不是 null 串也不是空串:
if(str != null && str.length() != 0)//檢查一個字符串既不是 null 串也不是空串
- 而且檢查 null 要放在前面,因爲在 null 值上調用方法會出現問題。
7、構建字符串
- 有時需要由較短的字符串構建字符串,例如按鍵或者來自文件中的單詞,使用 StringBuilder 或者 StringBuffer 可以提高效率。
StringBuilder builder = new StringBuilder();
builder.append('a'); // 添加單一字符
builder.append("bcd"); // 添加字符串
String completedString = builder.toString(); // 構建字符串
System.out.println(completedString);// 輸出 abcd