【问题标题】:Print all occurrences of vowels in a sentence打印句子中所有出现的元音
【发布时间】:2014-10-29 20:59:23
【问题描述】:

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

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

【问题讨论】:

    标签: java string return append


    【解决方案1】:

    您每次都替换元音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

    剧透

    这可以用更优雅的方式完成:

    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]
    

    【讨论】:

    • @javabeginner 很高兴我能帮上忙。我已经用更优雅的方式编辑了我的答案来解决这个问题 - 如果你愿意,请查看。另外 - 如果这个答案解决了您的问题,您可以随时接受。
    • y 并不总是元音 :) Is the letter Y a vowel or a consonant?
    • @DavidPostill 你可以省略它;)在我的语言中,它总是元音。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多