2 回答
TA贡献1890条经验 获得超9个赞
这是因为您String.replace通过newStr在循环内重新分配来覆盖结果。因此,您只能看到最后一次替换的效果。
假设 的内容upperCaseList是1, 5, 7。
在循环迭代 1 之后,newStr有I LoveMyDog
在循环迭代 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());
TA贡献1799条经验 获得超6个赞
不确定您是如何创建 upperCaseList 的,我建议为所有人创建一个循环。希望下面的代码可以满足您的要求。
public void test(){
String str ="ILoveMyDog";
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i< str.length() ; i++) {
if(Character.isUpperCase(str.charAt(i))){
//add space
strBuilder.append(" ");
}
//add the orginal char
strBuilder.append(str.charAt(i));
}
//use toString method
System.out.println(strBuilder.toString());
}
添加回答
举报