字符串中重复的元音

时间:2016-03-13 20:50:15

标签: java string char

我必须编写一个接受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”

我绞尽脑汁却无济于事。是什么导致程序中的错误,有没有更简单的方法来做到这一点?

6 个答案:

答案 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)

您的基本问题是您对strresult使用相同的索引编制,即使复制一个字母后,这两个字符串也会有不同的大小,您无法使用同样的指数。

构建新的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)

检查初始字符串。 在作业完成后,只能使用结果。