Java String split返回长度为0

时间:2017-04-29 10:54:24

标签: java arrays string

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。

当我修剪字符串时,我得到" " -> "",所以当我拆分它时,我应该有一个长度数组,第一个元素是""

3 个答案:

答案 0 :(得分:2)

Java字符串是不可变的,因此您必须在替换后存储对返回的String的引用,因为已返回新的String。你写了,

s.replaceAll("\\s", "");

但写, s = s.replaceAll("\\s", ""); 而不是上面。

无论您在String上执行操作,都要保持新引用的进一步发展。

答案 1 :(得分:0)

replaceAll的调用无效,但由于您在\\s+上拆分,split方法的工作方式完全相同:您最终得到一个空数组。

回想一个参数split与两个参数拆分相同,第二个参数传递零:

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

这意味着应用正则表达式模式,直到不再有更改,然后从数组中删除尾随空字符串。

最后一点是你的数组为空的原因:\\s+模式的应用程序产生一个数组[ "" ],只有一个空字符串。此字符串被split视为尾随,因此会从结果中删除。

即使您按照其他答案建议的方式修改了对replaceAll的调用,此结果也不会改变。

答案 2 :(得分:0)

您需要重新分配变量

s=s.replaceAll(...)