String物件有以下幾個特性
String s1 = new String("Hello");
,它有自己獨立的記憶體空間。String s1 = "Hello"
,如果程式中有數個變數都是相同的字串內容,會使用相同的記憶體空間(即字串池String Pool),會加快執行速度。String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = "Hello";
String str4 = "Hello";
System.out.println(str1 == str2); // false
System.out.println(str3 == str4); // true
System.out.println(str1 == str3); // false
System.out.println(str2 == str4); // false
如果要比較字串內容,不應該使用==,因為==在java中是比較位址(比較是否使用相同的記憶體空間)。應使用equals方法。
String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = "Hello";
String str4 = "Hello";
System.out.println(str1.equals(str2)); // true
System.out.println(str3.equals(str4)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str4)); // true
// 測試 int length();
String x = "HelloWorld";
int len = x.length();
System.out.println("共 " + len + " 字"); // 共 11 字
// 測試空字串 String str = "";
String str = "";
//Java6 以前
System.out.println(str.length()==0); // true
//Java6 開始
System.out.println(str.isEmpty()); // true
// char charAt(int index)
String s = "987654321";
char ch = s.charAt(3);
System.out.println(ch); // 6
// 測試 String substring(int beginIndex) , substring(int beginIndex, int endIndex)
String s1 = "Hello World";
String s2 = s1.substring(3);
System.out.println(s2); // lo World
String s3 = s1.substring(3, 8);
System.out.println(s3); // lo Wo
// 測試 String replace(char oldChar, char newChar)
String s = "Hello World";
s = s.replace('l','i');
System.out.println(s); // Heiio Worid
// 測試 String trim();
String s = " Hello World ";
System.out.println(s + ":長度為 " + s.length() ); // Hello World :長度為 15
// 刪除前後的空白
s = s.trim();
System.out.println(s + ":長度為 " + s.length() ); // Hello World:長度為 11
// 搜尋某字元的位置: int indexOf(int ch) / int indexOf(int ch, int fromIndex)
// 搜尋某字串的位置: int indexOf(String str) / int indexOf(String str, int fromIndex)
String s = "How are you";
// 求得字元'o'第一次出現的位置
System.out.println(s.indexOf('o')); // 1
// 從第6個字元開始,搜尋'o'第一次出現的位置
System.out.println(s.indexOf('o', 5)); // 9
// 從第1個字元開始,搜尋"re"第一次出現的位置
System.out.println(s.indexOf("re", 0)); // 5
// 如果指定的文字不存在,則傳回-1
System.out.println(s.indexOf('z')); // -1
// 根據比對樣式,切割字串,回傳String陣列
String str = "How-are-you";
String[] tokens = str.split("-");
for(int i=0 ; i<tokens.length ; i++) {
System.out.println(tokens[i]); // How // are // you
}
要注意的是,如果字串是由.隔開並不能直接使用".",而是要用"[.]+"。+是指任意多個重複字元。
String str = "How.are.you";
String[] tokens = str.split("[.]+");
for(int i=0 ; i<tokens.length ; i++) {
System.out.println(tokens[i]); // How // are // you
}
最後來一題練習題,有一個圖片檔的名字,我想要分別取得檔名及副檔名。
String str = "rainbow.png";
int pos = str.indexOf('.');
System.out.println(pos);
String str1 = str.substring(0, pos);
String str2 = str.substring(pos+1);
System.out.println(str1);
System.out.println(str2); // rainbow // png