iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Software Development

Java入門的30張門票系列 第 5

[Day5] String其實是個物件

  • 分享至 

  • xImage
  •  

String物件有以下幾個特性

  1. 它是不可變的(immutable)字串,一旦宣告便不能在原所在記憶體位置改變內容。使用String類別中的任何方法時,傳回的字串都會安置在新的記憶體空間。
  2. String s1 = new String("Hello");,它有自己獨立的記憶體空間。
  3. 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

常用方法

public int length(): 傳回字串長度

// 測試 int length();
String x = "HelloWorld";
int len = x.length();
System.out.println("共 " + len + " 字");  // 共 11 字

public boolean isEmpty(): 如果length()為0,則傳回true,否則傳回false

// 測試空字串 String str = "";
String str = "";
//Java6 以前
System.out.println(str.length()==0);  // true
//Java6 開始
System.out.println(str.isEmpty());  // true

public char charAt(int index): 透過索引值(從0開始算)來取得字串內某一位置的字元

// char charAt(int index)
String s = "987654321";
char ch = s.charAt(3);
System.out.println(ch);  // 6

public String substring(int beginIndex): 擷取從開始索引值的字元到字串的最後

public String substring(int beginIndex, int endIndex): 擷取從開始索引值的字元到結束索引值之間的字串

// 測試 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

public String replace(char oldChar, char newChar): 把舊字元改成新字元

// 測試 String replace(char oldChar, char newChar)
String s = "Hello World";
s = s.replace('l','i');
System.out.println(s);  // Heiio Worid

public String trim(): 刪除字串前後的空白

// 測試 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

public int indexOf(int ch): 搜尋第一次出現指定字元的索引值並回傳

public int indexOf(int ch, int fromIndex): 從指定索引值開始,搜尋第一次出現指定字元的索引值並回傳

public int indexOf(String str): 搜尋第一次出現指定字串的索引值並回傳

public int indexOf(String str, int fromIndex): 從指定索引值開始,搜尋第一次出現指定字串的索引值並回傳

// 搜尋某字元的位置: 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

public String[] split(String regex, int limit): 根據指定字元來切割字串

// 根據比對樣式,切割字串,回傳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

上一篇
[Day4] 物件參考變數又是什麼變數
下一篇
[Day6] 選擇結構 - if...else
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言