这是因为您通过在循环内String.replace重新分配来覆盖结果。newStr所以,你只能看到最后一次替换的效果。
假设内容upperCaseList为1, 5, 7。
在 Loop 迭代 1 之后,newStr有I LoveMyDog
在 Loop 迭代 2 之后,newStr有ILove MyDog(您没有使用之前的结果,而是使用原始字符串)
在循环迭代 3 之后,newStr有ILoveMy Dog
尝试这个,
String newStr = w;
for (int i = 0; i < upperCaseList.size(); i++) {
newStr = newStr.replace(w.substring(upperCaseList.get(i), upperCaseList.get(i)+1), " "+ w.substring(upperCaseList.get(i), upperCaseList.get(i)+1));
}
不过有很多方法可以解决这个问题。而不是存储包含大写字符的索引列表并使用String.substringand String.replace,您可以StringBuilder通过循环遍历字符并检查它是否为大写/小写来从原始字符串构建字符串。
StringBuilder resultBuilder = new StringBuilder();
for (int i = 1; i < w.length(); i++) { //Note: Starting at index 1
if (Character.isUpperCase(w.charAt(i))) {
resultBuilder.append(" ")
.append(w.charAt(i));
} else {
resultBuilder.append(w.charAt(i));
}
}
System.out.println(resultBuilder.toString());