所以这就是我想要做的。我拿一个给定的字符串,然后创建一个新的字符串。新字符串将与原始字符串相同,但辅音会加倍。
例如,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 :(得分: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");
}