我是Java的初学者。以下是我编写的一段代码。目的是在每个大写字符之间添加一个空格,例如string =“ ILoveMyDog” “我爱我的狗”。但是,此代码的结果是“ ILoveMy Dog”。有人可以帮助我找出问题所在吗? upperCaseList是另一种提取所有大写字符的索引并将其放入列表的方法,我很确定该部分是正确的
for (int i = 0; i < upperCaseList.size(); i++) {
newStr = w.replace(w.substring(upperCaseList.get(i), upperCaseList.get(i)+1), " "+ w.substring(upperCaseList.get(i), upperCaseList.get(i)+1));
}
return newStr
答案 0 :(得分:0)
这是因为您要通过在循环内重新分配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.substring
通过遍历字符并检查是否使用大写字母来创建原始字符串,而不是使用大写字母来存储索引列表,而使用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());
答案 1 :(得分:0)
不知道如何创建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());
}