Java: определение количества совпадений слов в заданной строке - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь найти число совпадений слов для заданной комбинации строки и ключевого слова, например:

public int matches(String keyword, String text){
 // ...
}

Пример:

Учитывая следующие вызовы:

System.out.println(matches("t", "Today is really great, isn't that GREAT?"));
System.out.println(matches("great", "Today is really great, isn't that GREAT?"));

Результат должен быть:

0
2

Пока я нашел это: Найти полное слово в строке java

Возвращает только если , данное ключевое слово существует, но не , сколько вхождений.Кроме того, я не уверен, игнорирует ли он чувствительность к регистру (что важно для меня).

Помните, что подстроки следует игнорировать!Я только хочу, чтобы были найдены полных слов .


ОБНОВЛЕНИЕ

Я забыл упомянуть, что я также хочу ключевые слова, которые разделяются черезпробел, чтобы соответствовать.

Например,

matches("today is", "Today is really great, isn't that GREAT?")

должен вернуть 1

Ответы [ 4 ]

2 голосов
/ 28 октября 2011

Как насчет использования indexOf?

s1 = s1.toLowerCase(Locale.US);
s2 = s2.toLowerCase(Locale.US);
int count = 0;
int x;
int y = s2.length();
while((x=s1.indexOf(s2)) != -1){
   count++;
   s1 = s1.substr(x,x+y);
}
return count;

Эффективная версия

    int count = 0;
    int y = s2.length();
    for(int i=0; i<=s1.length()-y; i++){
       int lettersMatched = 0;
       int j=0; 
       while(s1[i]==s2[j]){
           j++;
           i++; 
           lettersMatched++;
       }
       if(lettersMatched == y) count++;
    }   
    return count;

Для более эффективного решения вам придется немного изменить алгоритм KMP.Просто Google, это просто.

1 голос
/ 28 октября 2011

Используйте регулярное выражение с границами слова.Это, безусловно, самый простой выбор.

  int matches = 0;  
  Matcher matcher = Pattern.compile("\\bgreat\\b", Pattern.CASE_INSENSITIVE).matcher(text);
  while (matcher.find()) matches++;

Хотя ваш пробег может отличаться на некоторых иностранных языках.

0 голосов
/ 28 октября 2011

одним из вариантов будет RegEx. По сути, это звучит так, как будто вы ищете совпадение слова с любой пунктуацией слева или справа. так:

"отлично". " Отлично!" " отличный " " Отлично," "Великий"

все будет соответствовать, но

"наибольший"

бы не

0 голосов
/ 28 октября 2011

ну, вы можете использовать «разделить», чтобы отделить слова и найти, если существует слово точно соответствует. надеюсь, это поможет!

...