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。
当我修剪字符串时,我得到" " -> ""
,所以当我拆分它时,我应该有一个长度数组,第一个元素是""
?
答案 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(...)