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

时间:2018-02-28 20:32:40

标签: 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;
}

8 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

您可以使用设置数据结构而不是递增计数器,只需将元音添加到集合中。最后,您只能返回集合的大小。

答案 2 :(得分:1)

您的代码中的问题是您不计算不同的元音,而是计算字符串中的所有元音。 Java-8的方法:

public static int countDistinctVowels(String str) {
    str = str.toLowerCase();
    int count = (int) str.chars()                     // get IntStream of chars
            .mapToObj(c -> (char) c)                  // cast to char
            .filter(c -> "aeiou".indexOf(c) > -1)     // remove all non-vowels
            .distinct()                               // keep the distinct values
            .count();                                 // count the values

    return count;
}

还使用适当的Java命名约定:countDistinctVowels,no count_Distinct_Vowels

答案 3 :(得分:0)

这个计数肯定存在问题。至少。你应该重新考虑一下:

if (str.charAt(i) == 'a' || str.charAt(i) == 'e' || str.charAt(i) == 'i'
                || str.charAt(i) == 'o' || str.charAt(i) == 'u')

            count++;

答案 4 :(得分:0)

您可以使用方法contains

public static int count_Vowels(String str) {
    str = str.toLowerCase();
    int count = 0;
    count += string.contains("a") ? 1 : 0;
    count += string.contains("e") ? 1 : 0;
    count += string.contains("i") ? 1 : 0;
    count += string.contains("o") ? 1 : 0;
    count += string.contains("u") ? 1 : 0;
    return count;
}

答案 5 :(得分:0)

我在代码的评论中做了解释:

public static int count_Vowels(String str) {
        str = str.toLowerCase();
        Set<Character> setOfUsedChars = new HashSet<>(); // Here you store used vowels
        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') { // if currently checked character is vowel...
                setOfUsedChars.add(str.charAt(i)); // add this vowel to setOfUsedChars
            }
        }
        return setOfUsedChars.size(); // size of this sets is a number of vowels present in input String
}

答案 6 :(得分:0)

static void vow(String input){          
    String output=input.toLowerCase();
    int flaga=0,flage=0,flagi=0,flago=0,flagu=0;
    for(int i=0;i<input.length();i++) {
        if((output.charAt(i))=='a' && flaga==0) {
            System.out.print(input.charAt(i)+" ");
            flaga++;
        }
        if(output.charAt(i)=='e' && flage==0) {
            System.out.print(input.charAt(i)+" ");
            flage++;
        }
        if(output.charAt(i)=='i' && flagi==0) {
            System.out.print(input.charAt(i)+" ");
            flagi++;
        }
        if(output.charAt(i)=='o' && flago==0) {
            System.out.print(input.charAt(i)+" ");
            flago++;
        }
        if(output.charAt(i)=='u' && flagu==0) {
            System.out.print(input.charAt(i)+" ");
            flagu++;
        }
    }
}

答案 7 :(得分:0)

public static void main(String args[]) {
    String sentence;
    int v=0,c=0,ws=0;
    Scanner sc= new Scanner(System.in);
    sentence = sc.nextLine();
    sc.close();
    sentence.toLowerCase();
    String res="";
    for(int i=0;i<sentence.length();i++) {

        if(sentence.charAt(i)=='a'||sentence.charAt(i)=='e'||sentence.charAt(i)=='i'||sentence.charAt(i)=='o'||sentence.charAt(i)=='u') {
        if(res.indexOf(sentence.charAt(i))<0) {
            res+=sentence.charAt(i);
        v++;
        }//System.out.println(res.indexOf(sentence.charAt(i)));
            }
        else if(sentence.charAt(i)==' ')
            ws++;
        else c++;
    }
    System.out.println(res);
    System.out.println("no of vowels: "+v+"\n"+"no of consonants: "+c+"\n"+"no of 
   white spaces: "+ws);
}