String sentence = "Today is Tuesday";
Set<String> words = new HashSet<String>(
Arrays.asList(sentence.split(" "))
);
System.out.println(words.contains("Tue")); // prints "false"
System.out.println(words.contains("Tuesday")); // prints "true"
Каждый запрос contains(word)
равен O(1)
, поэтому если вам не хватает собственной сложной структуры словарных данных, это самое быстрое и практичное решение, если у вас есть много слов для поиска в тексте.
Используется String.split
, чтобы отделить слова от предложения в разделителе " "
. Другие возможные варианты, в зависимости от того, как определена проблема, - это использование \b
, привязка границы слова. Проблема значительно усложняется, если принять во внимание все грамматические особенности естественных языков (например, "can't"
делится на \b
на "can"
и "t"
).
Нечувствительность к регистру может быть легко введена с помощью традиционного трюка нормализации регистра: split и hash sentence.toLowerCase()
вместо этого, и посмотрите, если это contains(word.toLowerCase())
.
Смотри также