2016-10-11 45 views
1

所以这就是我想要做的。我拿一个给定的字符串,并创建一个新的字符串。新的字符串将与原始字符串相同,但会使辅音翻倍。例如,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是“不使用”。我在搞什么?

+0

您的for循环从不起作用。用for(int n = 0; n == 10; n ++)。 for循环只在条件n == 10是真的时才起作用,永远不会。 – Moonstruck

+0

我以为n = 0是开始点,n == 10是结束... – Muldawg2020

+0

我该如何改变它,所以它会经历10次迭代? – Muldawg2020

回答

1

试试这个。

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

像是认真的,发生了什么事,我在哪里学习? – Muldawg2020

+0

@ Muldawg2020请参阅文档[String.replaceAll](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceAll-java.lang.String-java.lang.String - )和[Pattern](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern。html) – saka1029

+0

这是疯了。谢谢你给我看。它仍然是WAAAYY在我的头上,但我要去了解它:) – Muldawg2020

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()

+0

试过了,但它给出了错误在你的第二行: '该方法包含(CharSequence)在字符串类型不适用于参数(字符)' 我可以通过使'元音'数组? – Muldawg2020

+0

只需将它转换为一个字符串,使它“”+ s.charAt(i) – Moonstruck

+0

不幸的是,由于某种原因不工作...我通读它,它似乎在概念上工作,但它不表现它应该的方式。就像如果你在'rabbit'上试试它不会返回'rrabbitt' .... – Muldawg2020

1

我注意到的第一件事是,底部的if语句使用赋值运算符。您想使用double-equals来测试该值。我将不得不更加密切关注更多的逻辑。

相关问题