Подсчитать количество слов в строке. Под словом имеется ввиду текст (без спецсимволов и цифр) разделенный пробелом

299
21 июля 2017, 02:21
String str = "The party has been divided abs14 on! the issue, with moderates5789 concerned about the effects on the most vulnerable.";
String[] words = str.split("\\s+");
System.out.println(Arrays.toString(words));

Разбиваю строку на массив слов по пробелу. И потом надо как-то задать условие, что если в слове не содержатся спецсимволы и цифры, то его плюсую в переменную count. Подскажите, как правильно это сделать, без использования regex. Надо создавать ещё массив char?

Answer 1

Если без использования регулярных выражений, то можно просто в лоб:

public class Main {
    public static void main(String[] args) {
        String str = "The party has been divided abs14 on! the issue, with moderates5789 concerned about the effects on the most vulnerable.";
        String[] words = str.split("\\s+");
        int count = 0;
        for (String word : words) {
            if (isValidWord(word)) {
                count++;
            }
        }
        System.out.println("Count: " + count);
    }
    private static boolean isValidWord(String word) {
        char[] chars = word.toCharArray();
        for (char c : chars) {
            if (!Character.isAlphabetic(c)) {
                return false;
            }
        }
        return true;
    }
}

UPD:

Ручная проверка на принадлежность символа латинице:

private static boolean isLatinChar(char c) {
    return (c >= 65 && c <= 90) || (c >= 97 && c <= 122);
}

где:

  • 65 – код символа A;
  • 90 – код символа Z;
  • 97 – код символа a;
  • 122 – код символа z.

При сравнении происходит неявное преобразование из char в int.

Answer 2

Вот вариант сделать все в одну строчку

String str = "The party has been divided abs14 on! the issue, with moderates5789 concerned about the effects on the most vulnerable.";
long count = Pattern.compile("\\s+").splitAsStream(str)
                 .map(w -> w.chars().allMatch(Character::isAlphabetic))
                 .filter(c -> c)
                 .count();
System.out.println("Count: " + count);
READ ALSO
Тестирование Spring-test через MockMvc

Тестирование Spring-test через MockMvc

Добрый день, пытаюсь создать тест для web уровня приложения, есть некий запрос

405
Метод matches.(String regex)

Метод matches.(String regex)

Мне нужно запретить использование цифр, пробелов и разных символов (?, &, %, и тд

224
Андроид приложение на libgdx не запускается

Андроид приложение на libgdx не запускается

Только начал осваивать libgdx, наскребал несколько статей по созданию меню и застрял на таком моменте, что приложение не запускается("Unfortunately,...

394