Подсчет гласных в струне - PullRequest
0 голосов
/ 25 июня 2019

Я получил 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 ]

1 голос
/ 25 июня 2019

Вам нужен какой-то перерыв после третьего слова. Один из вариантов - создать дополнительную переменную для отслеживания и увеличивать ее, когда символ является пробелом. После 3 слов вы можете разорвать петлю.

Другой вариант - разделить строку на слова с помощью метода split() и выполнить итерацию только по первым 3.

0 голосов
/ 25 июня 2019

Вы можете использовать регулярное выражение для разбиения слов в предложение, используя этот метод:

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

, чтобы разделить слова в предложении, , но . Вы должны быть осторожны, если пользователь вводит больше пробелов, первый «удаляется», а те, которые сразу после, оказываются в разбиении. Например:

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

генерирует этот массив: [1|2| |3| | |z].

Так что, на мой взгляд, в этот момент вы могли бы использовать фильтр, снова пройти по массиву / списку, удалив все пробелы, полученные из регулярного выражения или , более просто при прокрутке массива / списка и найдите место, которое вы не считаете. На этом этапе перейдите к анализу первых 3 элементов массива / списка, отбрасывая остальные (возможно, с помощью счетчика).

Наконец, снова используя Regex, вы также можете проверить, является ли анализируемый вами символ гласным или нет, используя эту команду:

if (s.charAt(i).matches("[AEIOUaeiou]")){ /*it's a vowel*/}
0 голосов
/ 25 июня 2019

Вы можете упростить свой код много , и вам будет проще добиться того, чего вы хотите.Вместо зацикливания на каждом символе вы можете разбить свою строку.А потом цикл по словам.Как то так:

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...