Как вычислить количество слов в строке, у которых чётное количество букв

Задача. Ввести строку с клавиатуры. В строке должны содержатся слова раздельные пробелами и двоеточиями. Необходимо вычислить количество слов в строке, у которых чётное количество букв.

Входные данные:

Aaa:aa abcs:abc acd Результат должен быть 2

мой код дает ошибку, подскажите, как исправить

    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Введите строку");
    String line = scanner.nextLine();
    String[] split = line.split(" ");
    int[] arr = new int[split.length];
    int count = 0;
    for(String s:split) {
        arr[count] = Integer.parseInt(s);
        if (arr.length % 2 == 0) {
            count++;
        }
    }
    System.out.println(count);
}

}


Ответы (2 шт):

Автор решения: Alexandr
  1. По условию задачи Вам необходимо разделять слова не только по пробелу, но и по двоеточию.
  2. Дополнительный массив arr Вам не нужен, т.к. можно сразу подсчитывать слова, удовлетворяющие условию.
  3. Вы используете метод java.lang.Integer#parseInt(java.lang.String), передавая в него строку, которую нельзя перевести в число. Вам необходимо использовать метод java.lang.String#length.

Рабочий код:

package com.somepackage;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите строку");
        String line = scanner.nextLine();
        String[] split = line.split("[\\s:]");
        int count = 0;
        for (String s : split) {
            if (s.length() % 2 == 0) {
                count++;
            }
        }
        System.out.println(count);
    }

}
→ Ссылка
Автор решения: tym32167

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

private static int getWordsWithEvenLettersCount(String sentence) {
    int idx = 0;
    int ret = 0;

    while (idx < sentence.length()) {
        while (idx < sentence.length() && !Character.isLetter(sentence.charAt(idx))) idx++;
        int start = idx;
        while (idx < sentence.length() && Character.isLetter(sentence.charAt(idx))) idx++;
        int len = idx - start;
        if (len > 0 && len % 2 == 0) ret++;
    }
    return ret;
}

Проверка

public static void main(String[] args) throws ExecutionException, InterruptedException {
    System.out.println(getWordsWithEvenLettersCount("Aaa:aa abcs:abc acd"));
}

Вывод

2
→ Ссылка