2016-07-13 2 views
-5

Как я могу получить общее количество нет. подстрок в строке. Для всех подстрок в строке.способ отображения итого нет. подстроки в строке

Ex:

str="This is this my book is This" 

O/р хотел бы ниже:

This-3 
Is=2 
my=1 
book=1 
+1

Сплит с использованием пустого символа; перебирать список результатов, сопоставлять каждый результат и подсчитывать совпадения. Если вы столкнулись с конкретной проблемой, вернитесь сюда. В противном случае это похоже на вопрос «пожалуйста, сделайте мою домашнюю работу». –

+0

@ jp-jee Это второй вопрос, который я видел в последний день или два, задавая этот очень конкретный вопрос - как считать слова в строке. Вероятно, они находятся в одном классе. – Aaron

+0

Возможный дубликат [count number of different words] (http://stackoverflow.com/questions/6454348/count-number-of-distinct-words) –

ответ

0

Если я правильно вы хотите искать вхождения всех слов, а не все возможные подстроки. Очень маленький, легко понять, код будет следующим:

// Split at space 
String[] words = input.split(" "); 
HashMap<String, Integer> countingMap = new HashMap<>(); 
for (String word : words) { 
    Integer counter = countingMap.get(word); 
    if (counter == null)) { 
     counter = 0; 
    } 
    countingMap.put(word, counter + 1); 
} 

Однако этот подход ограничен, поскольку это предполагает, каждое слово окружено пространством.

Regex - это более мощный инструмент, он обеспечивает специальный символ для границы слова (это также соответствует,.!? И т. Д.). Рассмотрим следующий шаблон:

\b(.+?)\b 

Вы можете увидеть пример здесь: regex101.com/r/hO8kA0/1

Как это сделать в Java?

Pattern pattern = Pattern.compile("\\b(.+?)\\b"); 
Matcher matcher = pattern.matcher(input); 

while(matcher.find()) { 
    String word = matcher.group(1); 
    // Here is your word, count the occurrences like above 
} 
+0

Учитывая, что ОП даже не пытался эту проблему, и это честно выглядит как домашнее задание, я бы не дал целого решения. http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions – Adam

0

Если я вас правильно понял, что это решение для вашей проблемы:

String str="This is this my book is This"; 
    Map<String, Integer> counts = new HashMap<String, Integer>(); 

    String[] words = str.toLowerCase().split("[\\s\\.,;!\\?]"); 

    for (String word: words) { 
     int count = counts.containsKey(word) ? counts.get(word).intValue() : 0; 
     counts.put(word, Integer.valueOf(count + 1)); 
    } 

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

+0

Учитывая, что ОП даже не пытался эту проблему, и это честно выглядит как домашнее задание, я бы не стал дать целое решение. http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions – Adam

+0

Или, что еще лучше, дайте ему решение Java 8 Lambda. Goodluck пытается получить кредит на это. – Orin

0
String str="This is this my book is This"; 
String[] words = str.split(" "); 
Map<String,Integer> unitwords = new HashMap<String,Integer>; 
for(String word: words){ 
    if(unitwords.containsKey(word)){ 
    unitwords[word]++; 
    }else{ 
    unitwords.add(word,1); 
} 

И распечатать единичные карты.

Смежные вопросы