在大写字符Java之间添加空格

时间:2018-09-02 03:22:37

标签: java string

我是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

2 个答案:

答案 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.replaceStringBuilder它是大写/小写。

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());
}