在句子中打印所有出现的元音

时间:2014-09-05 00:15:34

标签: java string return append

我写了一个应该在句子中打印所有元音的方法。但似乎我的代码只返回一个元音的出现。我需要在字符串中返回所有出现的内容。如何使输出成为附加字符串?

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;
}

1 个答案:

答案 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]