Ein bestimmtes Wort in einem Text zählen (String in String)

M

Martina

Gast
Hallo liebe Java-isten,

ich habe schon viele Threats zum Thema Wörter zählen oder String-in-String-Suche gefunden, aber leider konnte ich keine Lösung auf mein Problem übertragen.
Vielleicht kann mir jemand ja bei meiner Aufgabe helfen?

Ich möchte in einem Text (String z.B. aus einer Datei) ein bestimmtes Wort zählen. Hintergrund ist eine rudimentäre Text-Analyse. Zum Beispiel möchte ich zählen, wie oft das Wort "Java" in einem Text vorkommt.

Eine FileReader-Methode ist schon geschrieben, sodass der zu durchsuchende Text in einem String gespeichert ist.
Nachdem ich versucht habe, mit RegEx eine solche Zähl-Methode zu bauen, glaube ich, dass man es besser mit der Funktion indexOf lösen könnte. Doch genau dabei habe ich so meine Probleme.

Hier ist mein Code:
Java:
private int countWord(String s, String word){
	int count = 0;
	int start = 0;
	for (int i=0; i< s.length(); i++){
		if(s.indexOf(word,start) > -1)
		{
			System.out.println(word + " found at " + s.indexOf(word,start) + " started at " + start);
			count++;
			start += word.length();
		}
	}
	return count;
}

Diese Methode sollte zählen, wie oft der String "word" im String "s" vorkommt.
Leider läuft sie bis zum Absturz und liefert auch kein richtiges Ergebnis. :(

Kann mir jemand bitte sagen, wo mein Denkfehler liegt?
 

Michael...

Top Contributor
Zunächst einmal ist die for Schleife die über jeden einzelnen Buchstaben des Strings iteriert falsch.
Hier könnte man eine while Schleife nehmen, die solange läuft solange indexOf(word, start) einen Wert größer -1 liefert.
Dann muss man start bei jedem Schleifendurchgang so manipulieren, das es größer als der zuletzt gefundene Index ist. Wenn Du mit 0 startest, das Wort das erstmal bei Index 2000 vorkommt nutzt es ja nichts, wenn Du start = 0 + Wortlänge machst. Womit wird das Wort bei Index 2000 beim nächsten Schleifendurchlauf noch einmal "gefunden".
 

Fab1

Top Contributor
Leider läuft sie bis zum Absturz und liefert auch kein richtiges Ergebnis.
Kommt eine Fehlermeldung?

Java:
  start += word.length();
führt nicht zu dem gewünschten Ergebnis.

Grundgenommen würde ich die Sache so angehen. Du übergibst eine Zeile des Dokuments der Methode. Davon entfernst du alle Satzzeichen wie Komma Punkte Fragezeichen usw..
Diesen String splittest du mit der Methode split(" "); beim Leerzeichen somit erhälst du ein Array welche alle Wörter bzw. Zeichen enthält die mit Leerzeichen getrennt sind.
Nun prüfst du das Array mit einer For-Schleife oder auch mit der erweiterten For-Schleife, ob das von die Gesuchte Wort in dem Array von Wörtern vorkommt. Strings vergleicht man mit equals();

Wenn es vorkommt, dann einfach den Count inkrementieren.

Sollte so funktionieren.
 

Landei

Top Contributor
Der Algorithmus hat schon einen Denkfehler:

Angenommen das Wort is "abab", wie oft kommt es im Text "abababab" vor? So wie du die Sache angehst ([c]start += word.length();[/c]) kommt das Wort nur zweimal vor, aber ich denke, dreimal wäre hier "richtiger".
 
M

Martina

Gast
Danke für eure schnellen und tollen Antworten! :)

Ja, den Denkfehler sehe ich jetzt auch. Jetzt weiß ich auch nicht mehr, was ich mir dabei gedacht habe *g*

In dem Link von xehpuk habe ich eine gute Funktion gefunden, die verständlich ist und funktioniert:
Java:
public static int countWords(String text, String word){
        int count=0;
        Pattern pat = Pattern.compile(Pattern.quote(word));
        Matcher m;
        for(m = pat.matcher(text); m.find(); count++);
        return count;
    }

Das tut genau das, was ich möchte.

Nochmal ganz lieben Dank für eure Hilfe! :)
 

truesoul

Top Contributor
Hallo Martina.

Aber wenn z.B das Wort "ein" in diesem Text gesucht wird:
"einmal einhundertundeins, bitte"
bekommst du 3 als Ergebnis obwohl es nicht vorkommt. :)
 
M

Martina

Gast
Hallo truesoul,

das stimmt. Aber das kann man doch einfach umgehen, indem man beim zu zählenden Wort noch Leerzeichen davor und dahinter setzt, glaube ich:
Java:
public static int countWords(String text, String word){
        int count=0;
        Pattern pat = Pattern.compile(Pattern.quote(" " + word + " "));
        Matcher m;
        for(m = pat.matcher(text); m.find(); count++);
        return count;
    }
 
M

Martina

Gast
Stimmt!
Eine sehr kurzsichtige Lösung von mir :-(

Wie wäre es damit:
Java:
public static int countWords(String text, String word){
        int count=0;
        Pattern pat = Pattern.compile("[^\w]" + Pattern.quote(word));
        Matcher m;
        for(m = pat.matcher(text); m.find(); count++);
        return count;
    }

Dann würde der Counter erhöht, wenn das Wort vokrommt und davor weder Buchstabe noch Zahl oder Unterstrich steht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T bestimmtes wort aus string lesen Allgemeine Java-Themen 12
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
N Überprüfung ob ein bestimmtes Zeichen <1 mal vorkommt Allgemeine Java-Themen 2
F Screenshot auf bestimmtes Teilbild untersuchen Allgemeine Java-Themen 3
I PrinterJob - bestimmtes Druckerfach festlegen möglich? Allgemeine Java-Themen 2
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
B Tabelle. bei Wertänderung was bestimmtes machen Allgemeine Java-Themen 3
M wie warte ich auf ein bestimmtes Ereignis Allgemeine Java-Themen 6
X Bestimmtes Muster in Textdatei verändern Allgemeine Java-Themen 13
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
T Textarea nach nur 1 wort durchsuchen Allgemeine Java-Themen 3
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
M Methode um ein Wort raus zu schneiden? Allgemeine Java-Themen 3
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
B Gesplittetes Wort zusammenfügen Allgemeine Java-Themen 7
D Wort in Text mit >100.000 Wörter finden Allgemeine Java-Themen 7
F Char-Array nach einem Wort durchsuchen! Allgemeine Java-Themen 11
G Wort am Bildschirm -- Koordinaten suchen Allgemeine Java-Themen 2
D readChar; wort abspeichern :( Allgemeine Java-Themen 5
A Wort in seine Buchstaben zerlegen Allgemeine Java-Themen 37
E Wort kodieren mit bit shifting? Allgemeine Java-Themen 6
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
P Feststellen, Welche Classes ich aus einem JAR nutze? Allgemeine Java-Themen 6
Jose05 mit 2 - 3 Personen an einem Projekt coden Allgemeine Java-Themen 2
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
Zrebna DeleteNode-Funktionalität in einem AVL-Tree Allgemeine Java-Themen 5
pkm Warnungen in einem Drools-Projekt unterdrücken? Allgemeine Java-Themen 1
D Arbeiten mit einem Bitarray Allgemeine Java-Themen 13
D Union in einem Struct in JNA Allgemeine Java-Themen 5
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
R Zoom In einem grid Allgemeine Java-Themen 0
M java.io.EOFException bei einem DataoutputStream ?! Allgemeine Java-Themen 2
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Fahrtsimulation von einem Zug Allgemeine Java-Themen 0
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
G JTextField Inhalt in einem Long einfügen Allgemeine Java-Themen 2
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
B Maven Zugriff auf files aus einem kompilierten jar Allgemeine Java-Themen 15
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
K Classpath Alle Classen aus einem Package lesen Allgemeine Java-Themen 7
K Auf einer Website nach einem String suchen Allgemeine Java-Themen 5
P Zwei Applikationen mit einem Job Allgemeine Java-Themen 0
Sin137 OOP Auf JPanel zugreifen, das einem JTabbePane hinzugefügt worden ist Allgemeine Java-Themen 10
E Die if-Anweisung in einer Java Bean bzw. in einem Servlet? Allgemeine Java-Themen 8
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
M Ein Programm das nur von einem bestimmten Programm geöffnet werden kann Allgemeine Java-Themen 7
H Klammerberechnungen bei einem Taschenrechner Allgemeine Java-Themen 2
S Kann man mit einem GeneralPath.curveTo ein GeneralPath.quadTo ersetzen..? Allgemeine Java-Themen 2
Seikuassi Alle Escape-Sequenzen in einem String ersetzen Allgemeine Java-Themen 4
S Rekursive Suche in einem Netz Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
M Zeilen zu einem DefaultTableModel hinzufügen Allgemeine Java-Themen 1
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
M Abonnentenzahl, Aufrufe, etc. von einem YouTube-Kanal anzeigen Allgemeine Java-Themen 7
B Fehler bei einem Programm Allgemeine Java-Themen 10
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben