打印字符串中唯一元音的数量,Java

Ram*_*sey 1 java string

我需要找到不同元音的数量.我想出了下面的代码,但它无法区分相同的元音:

public static int count_Vowels(String str) {
    str = str.toLowerCase();
    int count = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i) == 'a' || str.charAt(i) == 'e' || str.charAt(i) == 'i'
                || str.charAt(i) == 'o' || str.charAt(i) == 'u') {
            count++;
        }
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

Ell*_*sch 6

我将从设置为的五个变量(每个元音一个)开始0,迭代输入中的字符并设置相应的变量,1如果我找到匹配,并简单地返回所述变量的累计值.喜欢,

public static int count_Vowels(String str) {
    int a = 0, e = 0, i = 0, o = 0, u = 0;
    for (char ch : str.toLowerCase().toCharArray()) {
        if (ch == 'a') {
            a = 1;
        } else if (ch == 'e') {
            e = 1;
        } else if (ch == 'i') {
            i = 1;
        } else if (ch == 'o') {
            o = 1;
        } else if (ch == 'u') {
            u = 1;
        }
    }
    return a + e + i + o + u;
}
Run Code Online (Sandbox Code Playgroud)

  • @ElliotFrisch,您的解决方案当然是一种非常有效的解决方案。我只是想知道 - 在较长字符串的情况下 - 哪种方法被认为更有效:1)在 for 循环中,在最后一个 `else-if` 添加一些代码来检查是否 `a+e+i +o+u` 已经等于 5(请注意,它正在每个循环中执行),如果是,则中断循环并立即返回该总和?2)在没有我提到的附加代码的情况下循环整个字符串,就像您在示例中所做的那样(未添加附加代码,但您需要循环整个字符串)。 (2认同)