Как я могу получить общее количество нет. подстрок в строке. Для всех подстрок в строке.способ отображения итого нет. подстроки в строке
Ex:
str="This is this my book is This"
O/р хотел бы ниже:
This-3
Is=2
my=1
book=1
Как я могу получить общее количество нет. подстрок в строке. Для всех подстрок в строке.способ отображения итого нет. подстроки в строке
Ex:
str="This is this my book is This"
O/р хотел бы ниже:
This-3
Is=2
my=1
book=1
Если я правильно вы хотите искать вхождения всех слов, а не все возможные подстроки. Очень маленький, легко понять, код будет следующим:
// 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
}
Учитывая, что ОП даже не пытался эту проблему, и это честно выглядит как домашнее задание, я бы не дал целого решения. http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions – Adam
Если я вас правильно понял, что это решение для вашей проблемы:
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));
}
Вы просто разбить строку с помощью разделителей, которые вы хотите, чтобы рассмотреть и собрать вхождения в карте.
Учитывая, что ОП даже не пытался эту проблему, и это честно выглядит как домашнее задание, я бы не стал дать целое решение. http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions – Adam
Или, что еще лучше, дайте ему решение Java 8 Lambda. Goodluck пытается получить кредит на это. – Orin
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);
}
И распечатать единичные карты.
Сплит с использованием пустого символа; перебирать список результатов, сопоставлять каждый результат и подсчитывать совпадения. Если вы столкнулись с конкретной проблемой, вернитесь сюда. В противном случае это похоже на вопрос «пожалуйста, сделайте мою домашнюю работу». –
@ jp-jee Это второй вопрос, который я видел в последний день или два, задавая этот очень конкретный вопрос - как считать слова в строке. Вероятно, они находятся в одном классе. – Aaron
Возможный дубликат [count number of different words] (http://stackoverflow.com/questions/6454348/count-number-of-distinct-words) –