簡體   English   中英

java - 拆分字符串后,數組中的第一個元素是什么?

[英]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.

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