我需要创建一个方法,该方法接收一个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();
}
}
答案 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();
}
这样您只需添加所需的字母,例如o
和u
,并跳过a
,e
,i
元音和所有辅音。此外,Java中的索引从0
开始,因此,为了获得所需的输出,您需要附加i + 1
而不是i
。
运行上面的代码后,我得到:
12o457
正如所料。但是,您应该重新提问,因为您不需要任何元音,并且您要添加o
和u
元音。并且你想要原始位置,所以它不是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);
}
这将有效:)