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

Другие вопросы по тегам