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

Java 检查字符串是否有元音,并创建一个新字符串,使辅音加倍,java,loops,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. //

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

例如,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;
}

显然,死代码存在一些问题,并且没有使用布尔hasvuels。我搞砸了什么?你可以做一件事。使用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方法将大大减少您的工作量

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中存储所需的字符串。您可以阅读更多关于

我注意到的第一件事是底部的if语句使用赋值运算符。您希望使用双等于来测试该值。我必须更仔细地研究逻辑,以了解更多信息

我注意到的第一件事是,底部的if语句使用赋值运算符。您希望使用双等于来测试该值。我必须更仔细地研究逻辑,以了解更多信息

试试这个

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

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


你的for循环永远不起作用。具有int n=0的一个;n==10;n++。for循环只有在条件n==10为真时才有效,这是永远不会发生的。我认为n=0是起点,n==10是终点……我如何改变它,使其经过10次迭代?我发布了一个解决方案,如果你喜欢,请将其标记为正确,否则你的算法要使其工作,你需要将其更改为n for循环永远不会工作。具有int n=0的一个;n==10;n++。for循环只有在条件n==10为真时才起作用,这是不可能的。我认为n=0是起点,n==10是终点…我如何改变它,使其经过10次迭代?我发布了一个解决方案,如果你喜欢,请将其标记为正确,否则你的算法要使其工作,你需要将其更改为n,但是它在第二行给出了一个错误:类型字符串中的containsCharSequence方法不适用于参数char。我可以通过将元音设置为数组来解决这个问题吗?只需将其设置为+s即可将其转换为字符串。charAtiyea不幸的是,由于某种原因,它不起作用。。。我通读了一遍,它似乎在概念上起作用,但它没有按应有的方式运行。比如,如果你在rabbit上试用,它不会返回rrabbitt…在新的更新中可以正常工作。我在我的机器上检查过了。问题是,char+char就像ASCII值加在一起,所以你可能会得到一些wierd数字,但由于你加了+char,它首先会转换成字符串,然后它应该会工作。啊,我知道问题出在哪里了。我在兔子身上试过了。预期:rrabbitt,实际回报:rrabbitt。看起来它两次返回辅音,但在第二行出现了一个错误:类型字符串中的containsCharSequence方法不适用于参数char。我可以通过将元音设置为数组来解决这个问题吗?只需将其设置为+s将其转换为字符串。charatiye不幸的是,由于某些原因,它无法工作。。。我通读了一遍,它似乎在概念上起作用,但它没有按应有的方式运行。比如,如果你在rabbit上试用,它不会返回rrabbitt…在新的更新中可以正常工作。我在我的机器上检查过了。问题是,char+char就像ASCII值加在一起,所以你可能会得到一些wierd数字,但由于你加了+char,它首先会转换成字符串,然后它应该会工作。啊,我知道问题出在哪里了。我在兔子身上试过了。预期:rrabbitt,实际回报:rrabbitt。看起来它在返回辅音twice@Muldawg2020见文件和文件;他疯了。谢谢你给我看。它仍然在我的头上,但我要学习它:@Muldawg2020看到文件和那个;他疯了。谢谢你给我看。这仍然是我的头晕,但我要学习它: