计算字符串中的元音

时间:2019-06-25 07:38:05

标签: java

我从用户那里得到3个字符串作为输入,然后对每个单词中的元音计数并按如下方式打印:如果元音计数= 0和1则打印0;如果元音计数= 2则打印2如果元音计数大于或等于3,然后打印3。 我尝试了这段代码。

Scanner in = new Scanner(System.in);
    String[] str = new String[3];
    for (int i = 0; i<3; i++) 
        str[i] = in .nextLine();
    for (int j = 0; j<3; j++) {
        String s1 = str[j];
        String s = s1.toLowerCase();

        int count = 0;
        for (int i = 0; i<s.length(); i++) 
        {
            if (s.charAt(i) == 'a' || s.charAt(i) == 'e' || s.charAt(i) == 'i' || s.charAt(i) == 'o' || s.charAt(i) == 'u') {
                count++;
            }
            if (s.charAt(i) == ' ') {
                if (count == 0||count == 1) {
                    System.out.print("0");
                } else if (count == 2) {
                    System.out.print("1");
                } else {
                    System.out.print("3");
                } 
                count = 0;
            }

        }
        if (count == 0||count == 1) {
            System.out.println("0");
        } else if (count == 2) {
            System.out.println("1");
        } else {
            System.out.println("3");
        }
    }

但是有一个条件,即使用户输入的字符串超过3个单词,也只能打印3个单词的元音计数。例如,如果用户输入字符串“大家好,你好,我很好和你“它打印” 010 011 001”仅像这样,但是此代码打印为“ 010” 011 00100“。现在如何更改代码以仅输出3个单词而不是超过3个单词来打印元音计数?

3 个答案:

答案 0 :(得分:1)

您需要在第三个单词后面稍作休息。一种选择是制作一个额外的变量来跟踪它,并在字符为空格时增加它。 3个字之后,您就可以打破循环。

其他选择是使用split()方法将字符串拆分成单词,然后仅对前3个进行迭代。

答案 1 :(得分:0)

您可以简化很多代码,并且可以更轻松地实现所需的功能。您可以拆分字符串,而不是在每个字符上循环。然后循环播放单词。像这样:

for (int j = 0; j<3; j++) {
    String[] words = str[j].toLowerCase().split(" ");

    // Use Math.min, thanks that it works even if you have only 2 words
    for(int i = 0; i < Math.min(3, words.length()); i++) {
        int count = 0;
        for (char letter : words[i].toCharArray()) {
           // if letter is vowel: count += 1;
        }
        // System.out.println depending on count value
    }
}

答案 2 :(得分:0)

您可以使用正则表达式使用以下方法将单词拆分为句子:

String[] splits = myPhrase.split(" ");

要拆分句子中的单词,但是,您必须注意,如果用户输入更多空格,则第一个空格被“消除”,而后面的空格最终被拆分。 例如:

String phrase = "1 2  3   z";
String[] splits = phrase.split(" ");

生成以下数组:[1|2| |3| | |z]

因此,在我看来,此时您可以使用过滤器,再次遍历数组/列表,从而消除当您滚动浏览数组/列表时从正则表达式派生的任何空间并找到您不考虑的空间。 此时,请分析数组/列表的前3个元素,并丢弃其他元素(也许使用计数器)。

最后,再次使用正则表达式,您还可以使用以下命令检查您正在分析的字符是否是元音:

if (s.charAt(i).matches("[AEIOUaeiou]")){ /*it's a vowel*/}