我必须编写一个接受String并返回new的方法 用两次出现的元音替换每个元音的字符串 那个元音。
例如:“你好”会返回“heelloo”
我已经尝试了几个小时的代码,但我没有做任何事情。这是我的代码:
public static String doubleVowel(String str)
{
String result = str;
for(int i = 0; i < str.length(); i++)
{
if((str.charAt(i) == 'a') ||
(str.charAt(i) == 'e') ||
(str.charAt(i) == 'i') ||
(str.charAt(i) == 'o') ||
(str.charAt(i) == 'u'))
{
result = result.substring(0, i + 1) + Character.toString(result.charAt(i))
+ result.substring(i + 1, result.length());
i++;
}
}
return result;
}
当输入为“hello”时,输出为“heelllo”
当输入是“计算机”时,输出是“coomppuuter”
当输入为“甜”时,输出为“sweeet”
我绞尽脑汁却无济于事。是什么导致程序中的错误,有没有更简单的方法来做到这一点?
答案 0 :(得分:2)
使用正则表达式:
return str.replaceAll("[aeiou]", "$0$0")
答案 1 :(得分:2)
您正在 str 中的 i 位置测试角色,但随后在结果中对其进行操作。直到结果第一次更新它确实等于 str ,但从那时起 - 两者不再同步...
编辑:
正如其他人所指出的那样 - 有更好的方法可以做到这一点。然而问题是程序中的错误是什么,而不是完成此任务的最佳方法是:)
答案 2 :(得分:2)
我认为你过度复杂化了。不要使用子字符串,只需通过附加每个字符来构造结果字符串,或者如果它是元音则附加两次:
onNotificationGCM: function(e) {
}
答案 3 :(得分:1)
为什么不使用替换?
public static String doubleVowel (String word) {
return word.replace("a", "aa")
.replace("e", "ee")
.replace("i", "ii")
.replace("o", "oo")
.replace("u", "uu");
}
答案 4 :(得分:1)
您的基本问题是您对str
和result
使用相同的索引编制,即使复制一个字母后,这两个字符串也会有不同的大小,您无法使用同样的指数。
构建新的StringBuilder会更简单,因此您不需要维护第二个索引。
StringBuilder result = new StringBuidler();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
result.append(ch); // always add the char
if ("aeiouAEIOU".indexOf(ch) >= 0)
result.append(ch); // add it again.
}
return result.toString();
这是使用调试器可以帮助您了解您的程序正在做什么的地方。
答案 5 :(得分:0)
检查初始字符串。 在作业完成后,只能使用结果。