Как вычислить количество слов в строке, у которых чётное количество букв
Задача. Ввести строку с клавиатуры. В строке должны содержатся слова раздельные пробелами и двоеточиями. Необходимо вычислить количество слов в строке, у которых чётное количество букв.
Входные данные:
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
→ Ссылка
- По условию задачи Вам необходимо разделять слова не только по пробелу, но и по двоеточию.
- Дополнительный массив
arrВам не нужен, т.к. можно сразу подсчитывать слова, удовлетворяющие условию. - Вы используете метод
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