Как разбить String на отдельные слова в Java?

473
09 июля 2017, 11:53

Всем Привет! У меня есть такая задача, надо разделить строку на слова, записать ее в массив и затем сравнить каждый элемент с каждым в массиве (т.е. каждое слово с каждым) те которые совпали удалить, недавно прочитал о equals(), который отлично справляется с сравнением строк, но по какой-то причине Он не работает в массиве. Java начал изучать недавно, поэтому строго не судите по коду, всем Спасибо!

public static void main(String[] args) {
    String b = "Привет Привет Привет";
    String s[] = b.split(" ");
    int i;
    for (i = 0; i < s.length; i++) {
        if (s[i].equals(s[i + 1])) {
            System.out.println(s[i]);
        }
    }
}
Answer 1

Ваш вариант не учитывает множество пробелов. Тут надо регулярным выражением пользоваться. Извлечь все слова потом поместить в SortedSet. Почему в SortedSet? Во-первых, он не допускает дублирование, а во-вторых отсортирует все слова по возрастанию, что облегчает проверку.

import java.util.SortedSet;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WordParser {
    private static final String EXAMPLE_TEST =
            "На дворе — трава, на траве — дрова. Не руби дрова на траве двора!";
    public static void main(String[] args) {
        Pattern pattern =
                Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS 
                        | Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(EXAMPLE_TEST);
        SortedSet<String> words = new TreeSet<>();
        while (matcher.find())
            words.add(matcher.group().toLowerCase());
        for (String word : words)
            System.out.println("word = " + word);
    }
}

"\w+" - модификатор находит только слова, то есть исключает знаки и т.п.

Pattern.UNICODE_CHARACTER_CLASS - установливает флаг на Юникоде чтобы можно было сделать поиск в любой кодировке. (Если честно не знаю как обстоят дело с поиском слов на азиатских языках как китайский, корейский, японский и т.д.)

Вот что печатает этот класс после запуска:

word = двора
word = дворе
word = дрова
word = на
word = не
word = руби
word = трава
word = траве

READ ALSO
Создание детектора блатных номеров

Создание детектора блатных номеров

Дано задание : сгенерировать список "блатных" номеров и сделать метод, который будет проверять наличие номера в спискеПрограмма должна работать...

210
Как экспортировать png из zeplin?

Как экспортировать png из zeplin?

Или вообще есть такая возможность в программе? в видео есть https://wwwyoutube

312
Как поправить верстку таблицы?

Как поправить верстку таблицы?

Получается криво, подскажите как поправитьЯ не верстальщик, столкнулся 1 раз

271
Как измерить размер потока данных из интернета?

Как измерить размер потока данных из интернета?

Мне нужно измерить объем скачанной информации в текущий момент времени(хочу сделать индикатор в процентах)

209