2016-07-13 8 views
-5

Wie soll ich die Gesamt-Nr. von Teilstrings in einer Zeichenfolge. Für alle Teilstrings in einer Zeichenfolge.wie Gesamtanzahl anzeigen. der Teilzeichenfolge in einer Zeichenfolge

Ex:

str="This is this my book is This" 

O/p sollte unten mögen:

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

Split mit dem Leerzeichen; Iteriere über die Ergebnisliste, vergleiche jedes Ergebnis und zähle Übereinstimmungen. Wenn Sie ein konkretes Problem haben, kommen Sie hierher zurück. Ansonsten scheint dies eine Frage zu sein, "bitte mach meine Hausaufgaben". –

+0

@ jp-jee Dies ist die zweite Frage, die ich in den letzten ein oder zwei Tagen gesehen habe, als ich diese sehr spezifische Frage gestellt habe - wie man Wörter in einer Zeichenfolge zählt. Sie sind wahrscheinlich in der gleichen Klasse. – Aaron

+0

Mögliches Duplikat von [Anzahl eindeutiger Wörter] (http://stackoverflow.com/questions/6454348/count-number-of-distinct-words) –

Antwort

0

Wenn ich Recht wollen Sie für die Vorkommen aller Wörter suchen, nicht alle möglichen Teil. Ein sehr kleiner, leicht zu verstehen, Code wäre die folgend:

// 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); 
} 

Doch dieser Ansatz beschränkt ist, wie ich jedes Wort davon ausgegangen, von einem Raum umgeben ist.

Regex ist ein leistungsfähigeres Werkzeug, es stellt ein spezielles Zeichen für eine Wortgrenze zur Verfügung (das entspricht auch,.!? Usw.). Betrachten Sie das folgende Muster:

\b(.+?)\b 

Sie ein Beispiel hier sehen können: regex101.com/r/hO8kA0/1

Wie dies in 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

Angesichts der OP hat nicht einmal versucht, dieses Problem und es sieht ehrlich aus wie Hausaufgaben, würde ich nicht eine ganze Lösung geben. http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions – Adam

0

Wenn ich Sie richtig verstehe, ist dies eine Lösung für Ihr Problem:

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)); 
    } 

Sie spalteten nur die Zeichenfolge durch das Trennzeichen Sie möchten die Vorkommen in einer Karte zu betrachten und zu sammeln.

+0

Angesichts der OP hat nicht einmal versucht, dieses Problem und es sieht ehrlich aus wie Hausaufgaben, würde ich nicht gib eine ganze Lösung. http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions – Adam

+0

Oder noch besser, geben Sie ihm eine Java 8 Lambda-Lösung. Goodluck versucht, Anerkennung dafür zu bekommen. – 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); 
} 

Und die Karten Unitwords drucken.

Verwandte Themen