1. 程式人生 > 其它 >Java中split的用法及一個金典入坑題目

Java中split的用法及一個金典入坑題目

split() 方法根據匹配給定的正則表示式來拆分字串。

注意: . 、 $、 | 和 * 等轉義字元,必須得加 \\。

注意:多個分隔符,可以用 | 作為連字元。

語法

public String[] split(String regex, int limit)

引數

  • regex -- 正則表示式分隔符。

  • limit -- 分割的份數。

返回值

字串陣列。

例子:

public class Test {
    public static void main(String args[]) {
        String str = new String("Welcome-to-Runoob");
 
        System.out.println("- 分隔符返回值 :" );
        for (String retval: str.split("-")){
            System.out.println(retval);
        }
 
        System.out.println("");
        System.out.println("- 分隔符設定分割份數返回值 :" );
        for (String retval: str.split("-", 2)){
            System.out.println(retval);
        }
 
        System.out.println("");
        String str2 = new String("www.runoob.com");
        System.out.println("轉義字元返回值 :" );
        for (String retval: str2.split("\\.", 3)){
            System.out.println(retval);
        }
 
        System.out.println("");
        String str3 = new String("acount=? and uu =? or n=?");
        System.out.println("多個分隔符返回值 :" );
        for (String retval: str3.split("and|or")){
            System.out.println(retval);
        }
    }
}

輸出結果:  

- 分隔符返回值 :
Welcome
to
Runoob

- 分隔符設定分割份數返回值 :
Welcome
to-Runoob

轉義字元返回值 :
www
runoob
com

多個分隔符返回值 :
acount=? 
 uu =? 
 n=?

 

入坑例題

LeetCode  151. 翻轉字串裡的單詞 

給你一個字串 s ,逐個翻轉字串中的所有 單詞 。

單詞 是由非空格字元組成的字串。s 中使用至少一個空格將字串中的 單詞 分隔開。

請你返回一個翻轉 s 中單詞順序並用單個空格相連的字串。

說明:

輸入字串 s 可以在前面、後面或者單詞間包含多餘的空格。
翻轉後單詞間應當僅用一個空格分隔。
翻轉後的字串中不應包含額外的空格。
 

示例 1:

輸入:s = "the sky is blue"
輸出:"blue is sky the"

入坑:部分成功程式碼

    public String reverseWords(String s) {
        if (s.length() == 0) {
            return "";
        }
        String[] arr = s.split(" ");
        StringBuffer bf = new StringBuffer();
        for (int i = arr.length - 1; i >= 0; i--) {
            bf.append(arr[i]);
            bf.append(" ");
        }
        return bf.toString().trim();

    }

分析:上述程式碼使用按空格分割將字串s分成字元形陣列arr,然後再倒序遍歷arr,並將遍歷的結果存在bf中,最後將bf轉成字串,然後去除頭尾的空格,得到結果,但是,

當使用:String[] arr = s.split(" ");時,對於下面這種情形則會出問題:

s = " Bob      Loves              Alice ";

根本原因就是當按照空格劃分,出現幾個連續的空格時,結果可能並不是我們想要的,看下面的程式碼或許你就明白了

public static void main(String[] args) {
        String s1="zhang san  li   si    wang";
        String[]a1=s1.split(" ");
        String[]a2=s1.split("\\s+");
        System.out.println(Arrays.toString(a1)+"   --- a1.len: "+a1.length);
        System.out.println(Arrays.toString(a2)+"   --- a2.len: "+a2.length);
    }  

思考一下,a1和a2這兩個陣列是一樣長的嗎?

看結果:

[zhang, san, , li, , , si, , , , wang]   --- a1.len: 11
[zhang, san, li, si, wang]   --- a2.len: 5

Process finished with exit code 0

其實我們希望a1的結果是a2那樣,但是其實並不是,實際上a1的長度是11

因此對於按空格劃分字串時,使用“\\s+”或許效果更好(表示至少匹配1個或多個空格)

// 為什麼是\\s,因為java中\表示是轉義字元,例如想輸出括號需要輸出 \( 而不是( 因此java中用\\s