Java String Buffer - 如何删除

Java String Buffer - how to delete

我需要创建一个方法,它接受一个字符串并生成一个不包含元音的新单词,并用每个辅音在原始单词中的位置替换它。我使用的单词是 "program" 所以我应该返回 "12o457".

下面是我的代码 - 当我尝试使用 deleteCharAt 时出现了越界,但我可以在这里使用追加。

public class Methods {

    public String getWord(String word){
        StringBuffer sb = new StringBuffer();


        for(int i=0; i<word.length(); i++)
        {
            if(word.charAt(i) =='a' ||
                word.charAt(i) == 'e' ||
                word.charAt(i) == 'i')
                {
                sb.deleteCharAt(i);
                }
        else if(word.charAt(i)=='o' || word.charAt(i)=='u')
            {
            sb.append(word.charAt(i));
            }
        else{sb.append((i));}
        }

        return sb.toString();

    }
}

嗯,你不需要为 StringBuilder 使用方法 deleteCharAt(i),因为它默认是空的,你只添加你想要的字符,而且 Strings 中的索引从 0 开始,所以你需要为辅音的位置追加 (i+1)

public static String getWord(String word) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < word.length(); i++) {

        if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
            sb.append(word.charAt(i));
        } else if (!(word.charAt(i) == 'a' ||
                word.charAt(i) == 'e' ||
                word.charAt(i) == 'i')) {
            sb.append((i + 1));
        }
    }

    return sb.toString();
}
    String string="how are you?";       
    string.replaceall("[a|e|o|i|u]","*");

    while(string.contains("*")){
    string.replaceFirst("*",string.indexOf("*")+1);
    }

这会起作用:)

您正试图删除您的 StringBuilder 中从未有过的字符,您只需按如下方式更改您的方法:

public String getWord(String word) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < word.length(); i++) {
        if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
            sb.append(word.charAt(i));
        } else if (word.charAt(i) != 'a' && word.charAt(i) != 'e' && word.charAt(i) != 'i') {
            sb.append((i + 1));
        }
    }
    return sb.toString();
}

这样你只添加你想要的字母例如 ou 并跳过 a, e, i 元音和所有辅音.此外,Java 中的索引从 0 开始,因此,要获得所需的输出,您需要附加 i + 1 而不仅仅是 i.

在运行上面的代码之后我得到:

12o457

符合预期。但是,您应该改写您的问题,因为您不需要任何元音字母,并且要添加 ou 元音字母。你想要原来的位置,所以它不是 i + 1 而是 i 它会给你:

01o346

然而,对于更大的词,这可能会给出如下内容:

Input: programprogram
Output: 12o45789o111214

如您所见,它变得凌乱了。希望您不会使用长度超过 10 个字符的单词。

编辑

我也没有注意到这一点,但正如@PeterLawrey 在他的 above, don't use String Buffer instead use a String Builder. For more information about this, see StringBuilder vs StringBuffer

中所说的那样