嘻嘻 發問時間: 電腦與網際網路程式設計 · 10 年前

java中,split()方法的一個問題...

小弟在Java的書,看到字串那一章,提到規則表示法的小節中,在split()方法的範例裡,有一個東西看不懂,程式碼如下:

public class Split {

static void prtArr(String[] a) {

for(String s : a)

System.out.print (s + ",");

System.out.println ("");

}

public static void main(String[] argv) {

String s = "Ken+Sue+Tom";

prtArr(s.split("[+m]", 2));

prtArr(s.split("[+m]", -2));

prtArr(s.split("[+m]", 0));

prtArr(s.split("[+m]")); //省略 limit 時, limit 預設為 0

}

}

請問程式碼中的[+m]是什麼意思呢?

2 個解答

評分
  • 10 年前
    最佳解答

    簡略您的問題:

    String s = "Ken+Sue+Tom";

    prtArr(s.split("[+m]", 2));

    prtArr(s.split("[+m]", -2));

    prtArr(s.split("[+m]", 0));

    prtArr(s.split("[+m]")); //省略 limit 時, limit 預設為 0

    請問程式碼中的[+m]是什麼意思呢?

    [+m]在這表示如果字元是+或m

    API解釋str.split(regex, n) 形式

    第一:如果該限制 n 大於 0,則網要將被最多應用 n - 1 次,陣列的長度將不會大於 n,而且陣列的最後一項將包含所有超出最後比對的定界符的輸入

    第二:如果 n 為非正,那麼網要將被應用盡可能多的次數,而且陣列可以是任何長度。

    (注意這邊是指陣列可以是任何長度.....所以包括空字元串)

    第三:如果 n 為 0,那麼網要將被應用盡可能多的次數,陣列可以是任何長度,並且結尾空字元串將被丟棄。

    (注意這邊是指並且結尾空字元串將被丟棄)

    了解以上開始您的問題:

    prtArr(s.split("[+m]", 2));

    使用分隔符號是+或m 第二個引數為2所以看第一條規則

    所以顯示結果:Ken,Sue+Tom,

    結果解析:網要將被最多應用 n - 1 次所以2-1= 1次

    陣列的長度將不會大於 n

    所以陣列內最多的話也只有兩個元素Ken和Sue+Tom

    prtArr(s.split("[+m]", -2));

    如果 n 為非正,而且陣列可以是任何長度。

    所以顯示結果:Ken,Sue,To,,

    結果解析:陣列內有元素Ken和Sue和To和""

    (注意結尾有個空字元串)

    prtArr(s.split("[+m]", 0));

    陣列可以是任何長度,並且結尾空字元串將被丟棄。

    所以顯示結果:Ken,Sue,To,

    結果解析:結尾空字元串將被丟棄結尾空字元串將被丟棄

    所以陣列內只有元素Ken和Sue和To剩下的結尾空字元串將被丟棄

    prtArr(s.split("[+m]"));//省略 limit 時, limit 預設為 0

    同上所以顯示結果:Ken,Sue,To,

    結果解析:prtArr(s.split("[+m]")); 也就是 prtArr(s.split("[+m]", 0));

    小弟的粗略解說 希望滿意 感謝指教

  • 10 年前

    []中括號是代表群組

    例如

    [a-c] 就是以a-c 3個字母來分割

    "123a234b345c".split("[a-c]");

    結果會是 123 234 345

    -------------------

    [m]代表分割字元是採用m,有+號是代表出現一次m或多次m

    你的程式裡,有沒有加+,對程式都沒影響

    參考資料: ME
還有問題?馬上發問,尋求解答。