Java функция для подсчета слов - PullRequest
1 голос
/ 24 декабря 2010

Есть ли какой-либо метод по умолчанию в Java, который может подсчитать общее вхождение слова? Например, сколько раз стек встречался в строке «стек является стеком».

Редактировать: пожалуйста, только Java без сторонней библиотеки.

Ответы [ 3 ]

2 голосов
/ 24 декабря 2010

Вы можете использовать StringUtils.countMatches(string, "stack") из commons-lang .Это не учитывает границы слов, поэтому «стек стека» будет учитываться как два вхождения.

1 голос
/ 24 декабря 2010

Нет встроенного метода .matchCount(). Вот мой импл.

public static int matchCount(String s, String find) {
     String[] split = s.split(" ");
     int count = 0;

     for(int i=0; i<split.length; i++){
        if(split[i].equals(find)){
           count++;
        }
     }
     return count;
 }


String s = "stack is stack";
System.out.println(matchCount(s, "stack")); // 2
0 голосов
/ 24 декабря 2010

Вы можете использовать:

public static int NumTimesInString(String target, String regex)
{
    return (" " + target + " ").split(regex).length - 1;
}

Это будет работать до тех пор, пока регулярное выражение не совпадает с начальным или конечным пробелом ... Хм, это может не работать в некоторых случаях.Возможно, вам лучше написать функцию, которая использует indexOf

public static int NumTimesInString(String target, String substr)
{
    int index = 0;
    int count = -1;
    while (index != -1)
    {
        index = target.indexOf(substr, index);
        count++;
    }
    return count;
}

ПРИМЕЧАНИЕ: не проверено

Любой из них можно использовать как:

int count = NumTimesInString("hello world hello foo bar hello", "hello"); 
// count is 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...