[英]java - after splitting a string, what is the first element in the array?
我試圖將一個字符串拆分成一個單個字母的數組。 這就是我做的,
String str = "abcddadfad";
System.out.println(str.length()); // output: 10
String[] strArr = str.split("");
System.out.println(strArr.length); // output: 11
System.out.println(strArr[0]); // output is nothing
新數組確實包含了所有字母,但它在索引0處沒有任何內容,甚至沒有空格,但仍然增加了數組的大小。 任何人都可以解釋為什么會這樣嗎?
考慮拆分表達式",1,2,3,4".split(",");
你會期待什么? 對,一個空字符串開頭。 在你的情況下,你在第一個'a'前面有一個'沒有',在它后面有一個'沒有'。
更新:評論表明這個解釋是不夠的解釋(它可能不是)......但是,它真的很簡單:引擎從字符串的開頭開始,它看起來是否在前面是什么它匹配模式。 如果是,則將其背后的內容分配給拆分中的新項目。
在第一個字符上,它有“”(后面沒有任何東西),它看起來在它前面是否有“”(圖案)。 有,所以它創造了一個“”匹配。
然后它繼續前進,它后面有一個'a',再一次,它再次出現在它前面。 所以第二個結果是一個“a”字符串。
一個有趣的觀察是,如果使用split("", -1)
您還將在結果數組的最后位置獲得空字符串結果。
編輯2:如果我進一步絞盡腦汁,並認為這是一個學術練習(我不會在現實生活中推薦這個......)我只能想到一個好的方法來將一個字符串的正則表達式split()
一個String[]
數組,每個字符串中有一個字符(而不是char [] - 其他人給出了很好的答案....)。
String[] chars = str.split("(?<=.)", str.length());
這將在非捕獲組中查看每個字符的后面,然后拆分,然后將數組大小限制為字符數(可以保留str.length()
,但如果你輸入-1
你將最后獲得額外的空間)
借用nitro2k01的替代方法(在評論下面)引用字符串的開頭和結尾,你可以可靠地拆分:
String[] chars = str.split("(?!(^|$))");
您可以使用字符串類中的內置java方法。 myString.toCharArray()
空字符串存儲在索引0處
我必須閱讀代碼,以確切了解“”如何作為正則表達式。 但是,請記住它匹配空字符串...並且參數是正則表達式,並且javadoc提到調用split(regex)與調用split(regex,0)相同。 因此,如果剩余的字符串都是空格(或emptystring),它將不會再次嘗試匹配,這就是為什么它與最后一個字符后的最終emptystring不匹配的原因。
更好的調用函數可能是str.toCharArray();
你也可以嘗試這種方式
String str = "abcddadfad";
System.out.println(str.length()); // output: 10
String[] strArr = new String[str.length()];
for (int i = 0; i < strArr.length; i++) {
strArr [i] =“”+ str.charAt(i);
// As per ratchet freak comment: it's easier (and more efficient) to use
strArr[i] = substring(i,i+1);
}
System.out.println(strArr.length); // output: 10
System.out.println(strArr[0]); // output: a
按照
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.