![](/img/trans.png)
[英]Java String split() method returns unexpected length of string array
[英]Java String split returns length 0
public int lengthOfLastWord(String s) {
s.replaceAll("\\s", "");
String[] splittedS = s.split("\\s+");
if(splittedS.length == 1 && splittedS[0].equals("")) return 0;
return splittedS[splittedS.length - 1].length();
}
我使用字符串" "
對其進行了測試,並返回splittedS
的長度為0。
當我修剪String時,是否得到了" " -> ""
,所以當我分割它時,我應該有一個長度為數組的數組,第一個元素為""
?
Java字符串是不可變的,因此替換后必須存儲對返回的字符串的引用,因為已經返回了新的字符串。 你寫,
s.replaceAll("\\s", "");
但是寫, s = s.replaceAll("\\\\s", "");
而不是上面。
無論您在String上執行什么操作,都應使新引用進一步移動。
對replaceAll
的調用沒有任何效果,但是由於您在\\\\s+
split
, split
方法的工作原理完全相同:您最終得到一個空數組。
回想一下,一參數split
與二參數拆分相同,第二個參數傳遞了零:
String[] splittedS = s.split("\\s+", 0);
// ^^^
這意味着將應用正則表達式模式,直到沒有更多更改為止,然后從數組中刪除結尾的空字符串。
最后一點是使您的數組為空的原因: \\\\s+
模式的應用程序會生成一個具有單個空字符串的數組[ "" ]
。 該字符串被視為通過split
尾隨 ,因此將其從結果中刪除。
即使您按照其他答案建議的方式修復了對replaceAll
的調用,此結果也不會改變。
您需要重新分配變量
s=s.replaceAll(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.