检查String是否有元音,并创建一个新的字符串,使辅音加倍

时间:2016-10-11 01:02:13

标签: java loops

所以这就是我想要做的。我拿一个给定的字符串,然后创建一个新的字符串。新字符串将与原始字符串相同,但辅音会加倍。

例如,rabbit变为rrabbitt,依此类推。它只会使尚未加倍的辅音加倍。

这是我到目前为止所拥有的:

//  Returns a new string in which all consonants in the given string are doubled. 
//  Consonants that are already doubled are not doubled again. 
//  For example, doubleConsonants("rabbit") returns "rrabbitt". 
//  It is assumed that in the given string is alphabetic and that no character 
//  appears more than twice in a row.
//  Parameters:
//  s - given string
//  Returns new string with all consonants doubled
----------------------------------------------------------------------------
public static String doubleConsonants(String s) {

    String newString = "";
    String vowels = "aeiouAEIOU";

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

        boolean hasVowel = false;
        for (int n = 0; n == 10; n++){

            if ( vowels.charAt(n) == s.charAt(i)) {

                newString += s.charAt(i);
                i++;
                hasVowel = true;
                break;
            }
        }
        if (hasVowel = false && s.charAt(i) != s.charAt(i+1) && s.charAt(i) != s.charAt(i-1)) {

            newString += s.charAt(i);
            i++;                
        }
        else if (hasVowel = false) {

            newString += s.charAt(i);
            i++;
        }
    }
    return newString;
}

显然“死代码”存在一些问题,布尔值hasVowels“未使用”。我搞砸了什么?

3 个答案:

答案 0 :(得分:3)

你可以做一件事。使用contains()方法将大大减少您的所有工作。

for (int i = 0; i < s.length(); i++) { // traverse through the string
    if (i < s.length() - 1 && s.charAt(i) == s.charAt(i + 1)) {
          newString += s.charAt(i);   // handles the double constant special condition like bb in rabbit
          i++;
    } else if (vowels.contains("" + s.charAt(i))) {  //check if the letter is a vowel
         newString += s.charAt(i); // if yes, add it once
    } else {
         newString += "" + s.charAt(i) +s.charAt(i); // else add it twice
    }
}

在此代码块的末尾,您将在newString中存储所需的字符串。您可以阅读有关contains()

的更多信息

答案 1 :(得分:1)

我注意到的第一件事是底部的if语句使用赋值运算符。您想使用double-equals来测试该值。我必须更多地关注逻辑。

答案 2 :(得分:1)

试试这个。

public static String doubleConsonants(String s) {
    return s.replaceAll("(?i)(([^aeiou])\\2+)|([^aeiou])", "$1$3$3");
}