[英]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()
)
我們來看看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.