Количество нет.слов с использованием регулярных выражений в Java - PullRequest
2 голосов
/ 27 августа 2010

Как посчитать, сколько раз каждое слово появляется в строке в Java с использованием регулярного выражения?

Ответы [ 6 ]

6 голосов
/ 27 августа 2010

Я не думаю, что регулярное выражение может полностью решить вашу проблему.

Вы хотите

  1. разбить строку на слова, регулярное выражение может сделать это дляочень простое определение слова, «части строки, разделенные пробелами или пунктуацией», что не очень хорошее определение, даже если вы просто придерживаетесь английского текста

  2. Подсчитайте количествовхождения каждого слова, полученного на шаге 1. Чтобы сделать это, вы должны хранить какое-то отображение, и регулярные выражения не сохраняют и не подсчитывают.*

  3. разбить входную строку (либо с помощью регулярных выражений, либо с помощью других средств) на массив строк слов
  4. выполнить итерацию по массиву и построить карту, чтобы вести подсчет каждого словапо карте, чтобы вывести список слов и количество вхождений.
5 голосов
/ 27 августа 2010

Я бы разделил вашу задачу на: а) определение слов и б) подсчет количества каждого уникального слова в тексте.

а) можно решить с помощью разбиения текста регулярным выражением. б) можно решить, построив карту с результатом а).

String text = "I like good mules. Mules are good :)";
String[] words = text.split("([\\W\\s]+)");
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word: words) {
    if (counts.containsKey(word)) {
        counts.put(word, counts.get(word) + 1);
    } else {
        counts.put(word, 1);
    }
}

результат: {Mules = 1, are = 1, good = 2, mules = 1, like = 1, I = 1}

2 голосов
/ 27 августа 2010
Pattern p = Pattern.compile("\\babba\\b");
Matcher m = p.matcher("abba is abba with abbabba and abba doing abba");
int count = 0;
while(m.find()){
    count++;
}
System.out.println(count); //4
1 голос
/ 27 августа 2010

Используя Гуава , это однострочный:

Multiset<String> countOfEachWord = 
   HashMultiset.create(Splitter.on(" ").omitEmptyStrings().split(myString));

тогда для подсчета "собаки", например, вы скажете:

<code>countOfEachWord.count("dog")
0 голосов
/ 31 июля 2013
    int CountWords(String t){
        return t.split("([[a-z][A-Z][0-9][\\Q-\\E]]+)",-1).length+(t.replaceAll("([[a-z][A-Z][0-9][\\W]]*)", "")).length()-1;
    }

английские слова (химические названия) + китайские слова

0 голосов
/ 27 августа 2010

Должны ли вы использовать регулярное выражение?Если нет, то это может помочь:

public static int count(final String string, final String substring)
  {
     int count = 0;
     int idx = 0;

     while ((idx = string.indexOf(substring, idx)) != -1)
     {
        idx++;
        count++;
     }

     return count;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...