Klassen String - nach Wort durchsuchen

Kel

Aktives Mitglied
Ich muss eine Textdatei auslesen und den String dann nach einem bestimmten Wort durchsuchen und die Häufigkeit zählen

Bisher sieht das bei mir so aus
Java:
	private static int zahlen(String suchwort, String text) {
		int anzahl;
		int laenge = text.length();
		int hochzaehler = 0;
		for (int i = 0; i <= laenge - 1; i++) {
			if (String.contains(suchwort, text.substring(hochzaehler, i))) {
				anzahl++;
				hochzaehler = i;	
			}	
		}
		return anzahl;
	}
Es gibt laut Übung eine Methode der Klasse String, mit der man überprüfen kann, ob ein Wort in einem String enthalten ist. Ich hab aber nur "contains" gefunden, welche mir folgende Fehlermeldung in Eclipse ausspuckt:
Description Resource Path Location Type
The method contains(CharSequence) in the type String is not applicable for the arguments (String, String) Worte.java /5_2/src line 46 Java Problem

Methode "contains" ist hier String (Java Platform SE 6)
Returns true if and only if this string contains the specified sequence of char values.

Anscheinend kann ich damit aber nur nach einzelnen chars suchen und nicht nach Strings in einem String. Weiss jemand, wie ich auf ein Wort in einem String überprüfen kann?
 

Michael...

Top Contributor
contains ist eine Instanzmethode und wird am String Objekt aufgerufen.
Daneben gibt's noch zwei indexOf(...) Methoden, die sogar die Stelle liefern, an der das Wort vorkommt.
 

Kel

Aktives Mitglied
/edit
Ich habe es jetzt in eine while-Schleife gepackt, ist kompakter und übersichtlicher
Er zählt aber irgendwie das erste und das letzte Wort in einer Datei nicht mit und ich verstehe nicht, wieso.
Java:
while (i <= text.length() - 1) {
			if (text.charAt(i) == ' ') {
				if (text.substring(hochzaehler, i).indexOf(suchwort) == 1) {
					anzahl++;
				}
				hochzaehler = i;
			}
			i++;


---------------------------------------------------------------
Ich hab das ganze jetzt mit indexOf(); gelöst

Java:
private static void zahlen(String suchwort, String text) {
		int anzahl = 0;
		// int "laenge" ist die Länge des Dateiinhaltes
		int laenge = text.length();
		GraphicIO.print("Der String hat die Länge: " + laenge);
		int hochzaehler = 0;
		// Schleife zum durchgehen aller chars der Datei
		for (int i = 0; i <= laenge - 1; i++) {
			// wenn ein char ein Leerzeichen ist ...
			if (text.charAt(i) == ' ') {
				// ... überprüfen, ob im Index von hochzaehler bis i das gesuchte Wort vorhanden ist
				// = Startindex des Wortes muss 0 sein, wenn das Wort am 0. Element beginnt
				if (text.substring(hochzaehler, i).indexOf(suchwort) == 0) {
					// damit nicht jedesmal wieder von Element 0 angefangen wird zu suchen
					// Indexrange beschränken auf letztes gefundenes Leerzeichen bis zum nächsten Leerzeiche
					hochzaehler = i;
					anzahl++;
				}				
			}	
		}
		//return anzahl;
		GraphicIO.print("Die Anzahl des Wortes " + suchwort + " beträgt: " + anzahl);
	}

Wenn man nach "int" sucht, wird man aber auch in "print" fündig, wie lässt sich sowas verhindern?
Ich habe es mit
Java:
if (text.substring(hochzaehler, i - 1).indexOf(suchwort) == 0)
versucht, weil der gesuchte String dann ja als 0. Element auftauchen müsste als Rückgabewert, aber wenn ich das so verwende, krieg ich gar kein Ergebnis mehr raus.

Wenn ich einen kleinen Test mache, an welcher Stelle das gesuchte Wort im Index anfängt, bekomme ich statt 0 dauernd falsche Zahlen, teilweise -1?
Java:
GraphicIO.print(text.substring(hochzaehler, (i - 1)).indexOf(suchwort));

Das ist im Grunde die einzige Stelle, wo ich grade noch hänge :(.
 
Zuletzt bearbeitet:
S

suchenda

Gast
Mehrere Möglichkeiten, die, weil recht interessant, mal gezeigt werden sollten:

indexOf:

Java:
    public static int countA(String k, String s) {
        int result = 0;
        int lastIndex = s.indexOf(k);
        while (lastIndex != -1) {
            result++;
            lastIndex = s.indexOf(k, lastIndex + k.length());
        }
        return result;
    }

Die berühmte contains (ineffektiv wegen Stringerzeugung) :

Java:
    public static int countB(String k, String s) {
        int result = 0;
        for (int i = 0; i < s.length() - k.length() + 1; i++) {
            if (s.substring(i, i + k.length()).contains(k)) {
                result++;
                i += k.length() - 1;
            }
        }
        return result;
    }

Pattern/Matcher/regex action:

Java:
    public static int countC(String k, String s) {
        int result = 0;
        Pattern p = Pattern.compile(k); // WARNUNG
        Matcher m = p.matcher(s);
        while (m.find()) {
            result++;
        }
        return result;
    }

Inkrementeller Algo, quasi wie A:

Java:
    public static int countD(String k, String s) {
        int result = 0;
        for (int i = 0; i < s.length() - k.length() + 1; i++) {
            int j = i;
            while (j < i + k.length() && s.charAt(j) == k.charAt(j - i)) {
                j++;
            }
            if (j == i + k.length()) {
                result++;
                i += k.length() - 1;
            }
        }
        return result;
    }
 
S

suchenda

Gast
achso, keine der Lösungen funktioniert mit "", ausgenommen C

B und D erzeugen wegen der Addition von -1 in der Schleife und Inkrementierung im Schleifenkopf einen recht unschönen infiniten Regress. Eben gleiches gilt für A, wo sich lastIndex nicht verändert.
 

Kel

Aktives Mitglied
Gibt es eine Möglichkeit, A so umzubauen, dass es keinen Loop gibt?
Auch bei der Suche nach einzelnen Buchstaben gibt es den gleichen Fehler.
 
S

suchenda

Gast
natürlich:

Java:
if (k == null || s == null || k.isEmpty() || s.isEmpty()) {
// werfe exception
// oder..
// gebe spezielle Wert zurück (z.B. (s.length() + 1))
}

das jedes mal zu schreiben ist natürlich viel zu schreiben und versteht sich so

nehme an, indexOf(s), wenn s.isEmpty() == true, liefert 0
man könnte nach der letzten Anweisung in der while eine Alternative in die while einfügen - das wäre nicht weniger Schreibarbeit und auch noch langsamer

Auch bei der Suche nach einzelnen Buchstaben gibt es den gleichen Fehler.

wenn k die Länge 1 hat, funktionieren alle Methoden (außer u.U. die C, weil k als regulärer Ausdruck aufgefasst und "compiliert" wird)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I String nach Wort suchen Java Basics - Anfänger-Themen 6
F Wort nach String ausgeben Java Basics - Anfänger-Themen 5
D Wort nach Leerzeichen - String Java Basics - Anfänger-Themen 10
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
M Array nach String durchsuchen und zurückgeben Java Basics - Anfänger-Themen 16
S String trennen nach beliebigen Zeichen Java Basics - Anfänger-Themen 3
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
MiMa String nach float Konvertieren Java Basics - Anfänger-Themen 23
P Input/Output Arraylist nach String eines Objekts durchsuchen Java Basics - Anfänger-Themen 26
F String immer weiter nach Bedarf vergrößern Java Basics - Anfänger-Themen 3
W Array nach String durchsuchen und Ausgeben Java Basics - Anfänger-Themen 8
G Variabel: Nach String benannte Methode ausführen Java Basics - Anfänger-Themen 13
S String nach Größe sortieren Java Basics - Anfänger-Themen 6
F In einem String nach einem String suchen und Zeichen danach ausgeben Java Basics - Anfänger-Themen 6
M String nach Zahlen durchsuchen Java Basics - Anfänger-Themen 21
H Variablen string nach byte Java Basics - Anfänger-Themen 12
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
C String Objekte Vergleich je nach Instanzierung unterschiedlich!!?!! Java Basics - Anfänger-Themen 4
H binärer String nach int convertieren Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
L Methoden String.split nach Absätzen? Java Basics - Anfänger-Themen 8
K Int nach String geht nicht Oo Java Basics - Anfänger-Themen 13
D Nach String "{" suchen Java Basics - Anfänger-Themen 4
S String nach Ausdruck durchsuchen und Folgeattribut ausgeben Java Basics - Anfänger-Themen 3
C String array nach File array Java Basics - Anfänger-Themen 15
R Datentypen In String nach String suchen und hinzufügen Java Basics - Anfänger-Themen 2
C Datentypen int[][]-Array nach String[][]-Array konvertieren Java Basics - Anfänger-Themen 7
K StringWriter/String nach InputStream konvertieren Java Basics - Anfänger-Themen 3
L String zuverlässig nach Char parsen? Java Basics - Anfänger-Themen 4
B String Array nach Int Array Java Basics - Anfänger-Themen 3
A String nach bestimmten kriterien splitten Java Basics - Anfänger-Themen 13
E String abscheiden nach letztem Backslash Java Basics - Anfänger-Themen 3
S String nach erstem Whitespace kopieren Java Basics - Anfänger-Themen 3
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
D String nach ABC sortieren Java Basics - Anfänger-Themen 2
B String vom Server nach Position... (erledigt) Java Basics - Anfänger-Themen 6
G String nach int casten Java Basics - Anfänger-Themen 5
I Unstimmigkeit bei String-nach-Double-Konvertierung Java Basics - Anfänger-Themen 7
S Worthäufigkeiten zählen nach String.split() Java Basics - Anfänger-Themen 5
D String mit 2 Stellen nach dem Komma (Dezimalzahl) Java Basics - Anfänger-Themen 9
M Int nach String konvertieren? Java Basics - Anfänger-Themen 11
G String nach Pluszeichen splitten Java Basics - Anfänger-Themen 2
R string nach int[] Java Basics - Anfänger-Themen 4
A String Array: Suche nach Name -> Wert? Java Basics - Anfänger-Themen 3
B nach Zeichen suchen dass im string mehrmals vorkommt Java Basics - Anfänger-Themen 3
S Arrays nach String kovertieren und sortieren Java Basics - Anfänger-Themen 4
M String nach einer bestimmten Anzahl von Zeichen trennen Java Basics - Anfänger-Themen 2
B String nach byte[] Java Basics - Anfänger-Themen 17
H Von String nach Date Java Basics - Anfänger-Themen 2
G String Sortierung nach mehreren Kriterien Java Basics - Anfänger-Themen 4
S String nach Marke im String finden. Java Basics - Anfänger-Themen 7
J nach Muster in String suchen Java Basics - Anfänger-Themen 4
H Konvertieren von String nach int Java Basics - Anfänger-Themen 9
S String nach boolean parsen! Java Basics - Anfänger-Themen 5
M long nach String casten Java Basics - Anfänger-Themen 2
U String nach Integer Casten. Java Basics - Anfänger-Themen 4
N String nach Zeichen ersetzen Java Basics - Anfänger-Themen 6
R String nach Binär-Form Java Basics - Anfänger-Themen 3
K int nach String umwandeln mit führenden Nullen Java Basics - Anfänger-Themen 4
G String: nach 3. Zeichen char ersetzen Java Basics - Anfänger-Themen 3
D Von String nach boolean umwandeln Java Basics - Anfänger-Themen 8
H Object nach String umwandeln Java Basics - Anfänger-Themen 2
B Typumwandlung von int nach String Java Basics - Anfänger-Themen 8
R in einem string nach einer zahl suchen und auslesen...... Java Basics - Anfänger-Themen 3
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben