簡體   English   中英

字符串#根據“\\ s +”拆分空字符串時的拆分行為

[英]String#split behavior when splitting the empty string according the “\s+”

我是Java的新手。 不幸的是,在Java中,很多新東西很難理解這些東西。

例如,

String str = "";
String[] arr = str.split("\\s+");
System.out.println(Arrays.toString(arr));
System.out.println(arr.length);
System.exit(0);

輸出是

[]
1

但為什么? 如果有人能解釋為什么數組的長度為1,我將不勝感激。

即使String實例為空,它仍然是一個String實例,並且在split()之后必須將“nothing”放在某處。 那是數組中的一個元素。

如果你打印str[0] ,你會得到一個空字符串。 真正的“無”將為null但是你會得到NullPointerException (你不能在null值上調用split()

在此輸入圖像描述 空字符串存在於拆分數組的Ist位置。

public static void main(String[] args) {
        String str = "";
        String[] arr = str.split("\\s+");
        System.out.println(Arrays.toString(arr));
        System.out.println(arr[0]);
        System.out.println(arr.length);
        System.exit(0);
    }

產量

[]

1

我們來看看Arrays.toString的實現:

public static String toString(Object[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));  // Let's print that!
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

既然數組不是空的,我們將進入for循環。 我們首先追加[結果。 然后我們追加String.valueOf(a[i]) 我們試着打印它:

String str = "";
String[] arr = str.split("\\s+");
System.out.println(String.valueOf(arr[0]));

你會看到輸出是......什么都沒有! 所以最終的結果是:

[]

請注意,這與Java 8無關。 split方法更早出現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM