Java String Buffer - 如何删除

时间:2015-12-29 20:19:41

标签: java string stringbuffer

我需要创建一个方法,该方法接收一个String并生成一个不包含元音的新单词,并用原始单词中的位置替换每个辅音。我使用的单词是"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();

    }
}

3 个答案:

答案 0 :(得分:1)

嗯,你不需要为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();
}

答案 1 :(得分: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,并跳过aei元音和所有辅音。此外,Java中的索引从0开始,因此,为了获得所需的输出,您需要附加i + 1而不是i

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

12o457

正如所料。但是,您应该重新提问,因为您不需要任何元音,并且您要添加ou元音。并且你想要原始位置,所以它不是i + 1而是i它会给你:

01o346

然而,如果用更大的词来表示这可能会出现以下情况:

Input: programprogram
Output: 12o45789o111214

你可以看到它变得凌乱。希望你不会使用长度为&gt;的单词。 10个字符。

修改

此外我没有注意到这一点,但正如@PeterLawrey在上面的comment中所说,不要使用String Buffer而是使用String Builder。有关此内容的详细信息,请参阅StringBuilder vs StringBuffer

答案 2 :(得分:0)

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

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

这将有效:)