簡體   English   中英

Java字符串拆分返回長度0

[英]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+ splitsplit方法的工作原理完全相同:您最終得到一個空數組。

回想一下,一參數split與二參數拆分相同,第二個參數傳遞了零:

String[] splittedS = s.split("\\s+", 0);
//                                  ^^^

這意味着將應用正則表達式模式,直到沒有更多更改為止,然后從數組中刪除結尾的空字符串。

最后一點是使您的數組為空的原因: \\\\s+模式的應用程序會生成一個具有單個空字符串的數組[ "" ] 該字符串被視為通過split 尾隨 ,因此將其從結果中刪除。

即使您按照其他答案建議的方式修復了對replaceAll的調用,此結果也不會改變。

您需要重新分配變量

s=s.replaceAll(...)

暫無
暫無

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

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