StringUtils.count Мечет слова, начинающиеся со строки?
Я используюStringUtils.countMatches
Чтобы посчитать частоты слов, есть ли способ поиска текста для слов, начинающихся с некоторых символов?
Пример:
поиск искусства в "искусстве в моей квартире" вернет 3! Мне нужно вернуть 2 для слов, начинающихся только с искусства.
Моим решением было заменить \r и \n в тексте пробелом и изменить код так:
text = text.replaceAll("(\r\n|\n)"," ").toLowerCase();
searchWord = " "+searchWord.toLowerCase();
StringUtils.countMatches(text, searchWord);
Я также попробовал следующее регулярное выражение:
patternString = "\\b(" + searchWord.toLowerCase().trim() + "([a-zA-Z]*))";
pattern = Pattern.compile(patternString);
matcher = pattern.matcher(text.toLowerCase());
Вопросы: - Имеет ли смысл мое первое решение или есть лучший способ сделать это?
-Мое второе решение быстрее? так как я работаю с большими текстовыми файлами и приличным количеством поисковых слов.
Спасибо
2 ответа
text = text.replaceAll("(\r\n|\n)"," ").toLowerCase();
searchWord = " "+searchWord.toLowerCase();
String[] words = text.split(" ");
int count = 0;
for(String word : words)
if(searchWord.length() < word.length())
if(word.substring(word.length).equals(searchWord))
count++;
Петли обеспечивают тот же эффект.
Используйте регулярное выражение для подсчета примеров art...
, Шаблон для использования:
\b<search-word>
Вот, \b
соответствует границе слова. Конечно, \b
должен быть экранирован, если указан в строке шаблона. Ниже приведен пример:
String input = "artificial art in my apartment";
Matcher matcher = Pattern.compile("\\bart").matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println(count);
Выход: 2