我写了一个应该在句子中打印所有元音的方法。但似乎我的代码只返回一个元音的出现。我需要在字符串中返回所有出现的内容。如何使输出成为附加字符串?
public String getVowels() {
for (int i=0; i <MyString.str.length(); i++) {
c = MyString.str.charAt(i);
if ((MyString.str.charAt(i) == 'a') ||
(MyString.str.charAt(i) == 'e') ||
(MyString.str.charAt(i) == 'i') ||
(MyString.str.charAt(i) == 'o') ||
(MyString.str.charAt(i) == 'u')) {
vowels = String.valueOf(c);
}
}
return vowels;
}
答案 0 :(得分:3)
您每次都要更换元音String
而不是更新它(附加)。
试试这个:
vowels += String.valueOf(c);
整个代码看起来像这样:
public String getVowels() {
String myString = "testString";
String vowels = "";
for (int i=0; i < myString.length();i++) {
if((myString.charAt(i) == 'a') ||
(myString.charAt(i) == 'e') ||
(myString.charAt(i) == 'i') ||
(myString.charAt(i) == 'o') ||
(myString.charAt(i) == 'u')) {
vowels += String.valueOf(myString.charAt(i));
}
}
return vowels;
}
输出:
ei
请注意,您只检查小写字母而忘记了 y 。
<强> SPOILER 强>
这可以通过更优雅的方式完成:
public void vowelsTest() {
System.out.println(getVowels("MY FIRST test STRING on STACK overFLOW"));
}
public Collection<Character> getVowels(final String testString)
{
String allVowels = "aAeEiIoOuUyY";
Collection<Character> vowelsInString = new ArrayList<Character>();
for (char letter : testString.toCharArray()) {
if (allVowels.indexOf(letter) >= 0) {
vowelsInString.add(letter);
}
}
return vowelsInString;
}
这将导致:
[Y, I, e, I, o, A, o, e, O]
如果您只想要每个元音的一个实例,那么您只需将ArrayList
更改为HashSet
即可。
HashSet
的输出:
[e, A, o, O, Y, I]
如果您只需要每个元音的一个实例,无论大写/小写,您都可以用add
代替该行:
vowelsInString.add(String.valueOf(letter).toLowerCase().charAt(0));
这将导致:
[e, a, o, y, i]