Suchen von Wörtern in einem Text

Status
Nicht offen für weitere Antworten.

sirius1010

Mitglied
Hi,

ich hab ein kleines Problem mit dem Vergleichen von Strings!
ICh möchte gern aus einem Text, den ich per Datei einlese die Häufigkeit eines Wortes ausgeben, das ich über die Tatur eingebe!
Eingabe und ausgabe funktioniert schon ganz gut, einziges Problem bis jetzt findet er nur die wörter, die seperat stehen, am anfang und am ende! und die groß und kleinschreibung wird beachtet, leider!
Wie bekomm ich es am besten hin, dass er auch wörter findet die in einem wort "gefangen" sind?
also ich hab z.B. den Text:

"user userlist neuuser neuuserlist"

wenn ich dann nach "user" suche gibt er an es sei nur 3 mal vorhanden!

Code:
import java.io.*;
import java.util.*;
public class probe extends Environment {

		public static void main(String[] args) {
			probe pn = new probe();
			pn.mainProgram(args);
		}
		
			
	void mainProgram(String[] args) {
		
		
			int anzahl=0;
		    int position = 0;
			String zeile= null;
		    String wort = new String();
		    String token;
		    FileReader text;
		    BufferedReader tippen;    //eingabepuffer fuer Suchbegriff
		    BufferedReader eingabe;   //eingabepuffer fuer datei
		    
				try {
				//Eingabe des Suchbegriffs	
				tippen = new BufferedReader(new InputStreamReader(System.in));
				System.out.print("Suchbegriff: ");
				wort = tippen.readLine();
				char[] suchbegriff = wort.toCharArray();
				
				//Einlesen der Datei zur Suche	
				File Datei = new File("datei.txt");
				text = new FileReader(Datei);
				eingabe = new BufferedReader(text);
				zeile =eingabe.readLine();
				
				//solange datei noch zeichen enthält
				while (zeile != null){
				
				//Aufteilung der Zeichenkette in Token "Leerzeichen" dabei als Trennzeichen	
				StringTokenizer string = new StringTokenizer(zeile," ");
				
				while (string.hasMoreTokens()){  //solange Token weitere Token vorhanden
				
					token = string.nextToken();  //gehe zum nächsten Token
					if (token.startsWith(wort))  //Token beginnt mit Suchwort, dann erhöhe anzahl
					anzahl++;
					else {
						if (token.endsWith(wort)) //Token endet mit Suchwort, dann erhöhe anzahl
								anzahl++;
			
					}
				
				zeile = eingabe.readLine();
				}
			  }
			//Ausgabe des Ergebnisses	
			System.out.println("Das wort " +wort+ " wurde " +anzahl+ " mal gefunden!");
				
			eingabe.close();
				
			} catch(IOException e)
			 {
			 System.out.println("Bitte geben sie keine Sonderzeichen ein");
			 }
			 catch(NoSuchElementException e)
			 {
			 System.out.println("Bitte geben sie einen Suchbegriff ein!");
			 }
			
      }
}


Danke für ein paar tipps!
 

jptc.org

Bekanntes Mitglied
Eigentlich ganz einfach (solange Du nicht auf die Performance achten musst). Es gibt eine tolle Methode indexOf auf dem String und mit dem kannst Du Strings suchen bis es keine mehr zu finden gibt.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)

Wenn Du den gesamten Text dann noch Uppercase machst und den Suchbegriff auch (toUppercase), dann sollte Dein Problem lösbar sein. (Für ne Schulaufgabe ausreichend)

Sollte das Ganze auch noch schnell laufen und produktiv genutzt werden, so verwendet man am besten regular expression (im JDK 1.5 mit drin oder http://jakarta.apache.org/regexp/index.html).
 

SebiB90

Top Contributor
sirius1010 hat gesagt.:
"user userlist neuuser neuuserlist"

wenn ich dann nach "user" suche gibt er an es sei nur 3 mal vorhanden!
ist ja klar das der das nur 3 mal findest denn du guckst immer nur ob ein wort mit user anfängt oder aufhört aber nicht ob es irgendwo mitten drin ist
 

sirius1010

Mitglied
ja genau, das meinte ich damit auch, dass ich wie man das wort in der mitte findet, ich versuchs mit indexOf mal, bis jetzt klappts noch nicht so ganz...aber er findet schon mehr, eher zuviel :)
 

sirius1010

Mitglied
hab das mal mit indexOf zusammengesbastelt, sieht vielleicht bissel komisch aus aber so gehts auf jeden fall:

Code:
//solange datei noch zeichen enthält
				while (zeile != null){
				//Aufteilung der Zeichenkette in Token "Leerzeichen",".", "/" und "()" dabei als Trennzeichen	
				StringTokenizer string = new StringTokenizer(zeile," ,./()");
				while (string.hasMoreTokens()){  //solange Token weitere Token vorhanden
				
					token = string.nextToken();  //gehe zum nächsten Token
					if (token.startsWith(wort))  //Token beginnt mit Suchwort, dann erhöhe anzahl
					anzahl++;
					else {
						if (token.endsWith(wort)) //Token endet mit Suchwort, dann erhöhe anzahl
								anzahl++;
					
						else {
				 pos = token.indexOf(suchbegriff[0]);
			 if (pos > -1 && token.length() >= wort.length()+pos) 
		
		    token = token.substring(pos,wort.length()+pos);
		  if (token.equals(wort))
			 anzahl++;
			 }
					}
					zeile = eingabe.readLine();
				}
			 }
				
			//Ausgabe des Ergebnisses	
			System.out.println("Das wort " +wort+ " wurde " +anzahl+ " mal gefunden!");
				
			eingabe.close();

kann man das als okay definiern oder gibts da vielleicht ne bessere methode? Aber ich würde gerne IgnoreCase mit reinbringen, für groß und kleinschreibung aber das funzt nciht so wie es soll und mit toUpperCase gehts irgendwie auch nicht so das was sinvolles bei rauskommt. *grübel*
 

jptc.org

Bekanntes Mitglied
also ich möchte ungern deine hausaufgaben machen, aber durchdenke doch bitte deinen code (mal ein diagramm) bevor du codierst! den spass mit endsWith und startsWith lässt du am besten ganz weg. dann verwendest du eine while schleife, welche solange läuft, wie das wort im string enthalten ist (pos > -1). und das indexOf rufst du natürlich immer ab der letzten gefundenen position + 1 auf (ich hoffe jetzt hab ich keinen denkfehler :roll: ).

und versuch auch noch mit

Code:
wort = wort.toUppercase();
token = string.nextToken().toUppercase();

so ich hoffe das hilft weiter.
 

sirius1010

Mitglied
also das mit touppercase funzt gar nicht, weil nur ändern der Buchstaben von klein in groß bringt mir ja nicht viel! hab auch schon versucht nur einzelne Buchstaben zu änderen aber das klappt dann nicht mehr mit dem vergleichen.
ganz ohne startsWith und endsWith gehts nicht...

Code:
ndex = token.indexOf(suchbegriff[0]);				 
while (index > -1 && token.length() >= wort.length()+index){
					token = token.substring(index,wort.length()+index); 
		 			if (token.equals(wort))              
					    anzahl++;              
				 }

oder hab ich da mal wieder was völlig verdreht oder ganz falsch eingebracht?:roll:
 

Wildcard

Top Contributor
Am besten du liest dich mal in RegEx ein, dann gibts auch so tolle Sachen wie
CASE_INSENSITIVE
Mit dem Tokenizer würd ich gar nicht anfangen, da RegEx wesentlich mächtiger sind, und man sich das früher
oder später sowieso aneignen muss.
 

sirius1010

Mitglied
So programm läuft jetzt und sogar mit toUpperCase...manchmal braucht man eben etwas länger!
Danke an alle die geholfen haben!
 
G

Guest

Gast
Hi

ich möchte einen String vom Programm untersuchen lassen, ob er eine spezielle Formatierung hat.
Das Programm soll nämlich erkennen ob der eingegebene String ein Wort oder
ein Datum mit dem Format: ##.##.#### ist. #steht für eine beliebige Zahl.
Wie kann ich das am einfachsten programmieren.


Mfg
 

André Uhres

Top Contributor
if(str.matches("[0-9]{2}\\.[0-9]{2}\\.[0-9]{4}"))--->datum
Oder:
if(str.matches("(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}"))---> datum
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
? Algo gleicher Buchstabe in 2 Wörtern suchen Java Basics - Anfänger-Themen 16
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I String nach Wort suchen Java Basics - Anfänger-Themen 6
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
B Java Mail: suchen von mehreren Emailadressen Java Basics - Anfänger-Themen 5
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
B Suchen und sortieren Java Basics - Anfänger-Themen 10
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
A Erste Schritte Buchstaben im Array suchen Java Basics - Anfänger-Themen 8
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
S Wort suchen und ersetzen in einer Datei Java Basics - Anfänger-Themen 6
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
C In ArrayList suchen Java Basics - Anfänger-Themen 6
G nach 9 - stelliger Nummer suchen Java Basics - Anfänger-Themen 7
D Liste nach 2 gleichen Einträgen suchen Java Basics - Anfänger-Themen 4
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
C char in String suchen und durch anderen String ersetzen Java Basics - Anfänger-Themen 2
Y Explizites Suchen Java Basics - Anfänger-Themen 13
G Zeichen suchen und Ausgeben. Java Basics - Anfänger-Themen 3
K String in String-Array suchen Java Basics - Anfänger-Themen 11
T Suchen in sortiertem Feld Java Basics - Anfänger-Themen 2
K Im String Array suchen Java Basics - Anfänger-Themen 8
E Belebeste Area im Game of Life suchen Java Basics - Anfänger-Themen 0
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
L Name im Array suchen Java Basics - Anfänger-Themen 12
I Innerhalb einer Methode suchen und hinzufügen. Neues Objekt in Suche dann? Java Basics - Anfänger-Themen 8
F Methoden Kontaktliste - String in einem Array suchen und ausgeben Java Basics - Anfänger-Themen 3
A Suchen und ersetzen Java Basics - Anfänger-Themen 13
P Teilstring suchen Java Basics - Anfänger-Themen 3
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
D String in Datei suchen und löschen Java Basics - Anfänger-Themen 2
A Nach dem Objekt suchen Java Basics - Anfänger-Themen 1
F In einem String nach einem String suchen und Zeichen danach ausgeben Java Basics - Anfänger-Themen 6
K Maximum Suchen Array Java Basics - Anfänger-Themen 6
W .txt auslesen und nach schlüsselbegriffen suchen Java Basics - Anfänger-Themen 7
S Suchen in Arrays Java Basics - Anfänger-Themen 7
J Input/Output String Suchen und Ersetzen Java Basics - Anfänger-Themen 8
A Kleinste Ziffer im Array suchen um Sortierung zu erzeugen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
T String in Array suchen Java Basics - Anfänger-Themen 9
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
B Nach regulären Ausdrücken suchen Java Basics - Anfänger-Themen 14
C Bestimmte Informationen von Webseite suchen Java Basics - Anfänger-Themen 13
B Suchen und ersetzten mit \ ? Java Basics - Anfänger-Themen 9
A String in String suchen Java Basics - Anfänger-Themen 3
J Nach einem Wert suchen +/- x Java Basics - Anfänger-Themen 8
D Binäres Suchen Java Basics - Anfänger-Themen 11
N Weg suchen bei Adjazenzmatrix Java Basics - Anfänger-Themen 2
E Suchen mit Hashfunktion ?! Java Basics - Anfänger-Themen 7
C Binäres Suchen mit Rekursion Java Basics - Anfänger-Themen 5
I Erste Schritte Ein Zeichen in einem Array Suchen Java Basics - Anfänger-Themen 8
N Binär suchen: Java Basics - Anfänger-Themen 4
D In Hashtable suchen Java Basics - Anfänger-Themen 3
J In String suchen Java Basics - Anfänger-Themen 14
D Nach String "{" suchen Java Basics - Anfänger-Themen 4
3 3. Element mit regulären Ausdruck suchen Java Basics - Anfänger-Themen 12
L String suchen und ersetzten, ohne neue Datei Java Basics - Anfänger-Themen 4
M Notiz suchen-Programm Java Basics - Anfänger-Themen 3
F Zusammenhängend Komponente suchen(Graph) Java Basics - Anfänger-Themen 4
M Teilmatrix suchen Java Basics - Anfänger-Themen 16
B Java nach bestimmter dateiendung suchen Java Basics - Anfänger-Themen 6
B Element in Folge suchen Java Basics - Anfänger-Themen 7
T String aus einer ArrayList suchen Java Basics - Anfänger-Themen 7
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
R Datentypen In String nach String suchen und hinzufügen Java Basics - Anfänger-Themen 2
D Textdatei einlesen und darin suchen Java Basics - Anfänger-Themen 11
I Wie kann ich ein Wort in einem String suchen Java Basics - Anfänger-Themen 3
P char[] - suchen/ löschen Java Basics - Anfänger-Themen 6
S Datentypen In ArrayList nach Element suchen und Position ausgeben Java Basics - Anfänger-Themen 9
D Array Fehler / groesste Primzahl suchen Java Basics - Anfänger-Themen 4
C Objekt aus Liste suchen Java Basics - Anfänger-Themen 6
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
D In String suchen und extrahieren Java Basics - Anfänger-Themen 13
B Suchen nach Teilstring, um Text danach ausgeben Java Basics - Anfänger-Themen 11
H Höchsten int-Wert(key) aus einer Hashmap suchen Java Basics - Anfänger-Themen 19
J Feld in Tabelle suchen Java Basics - Anfänger-Themen 8
Developer_X Strings in JTextarea suchen Java Basics - Anfänger-Themen 15
F Datei suchen --> Pfad als String speichern Java Basics - Anfänger-Themen 8
R einen gegebenen String in einem String suchen Java Basics - Anfänger-Themen 6
J Suchen nach ArrayObjekten Java Basics - Anfänger-Themen 17
G String suchen Java Basics - Anfänger-Themen 4
X Attribut in n Objekten suchen Java Basics - Anfänger-Themen 8
G String in Array suchen Java Basics - Anfänger-Themen 6
G Texte innerhalb von Dateien suchen Java Basics - Anfänger-Themen 9
P Text in Verzeichnisse suchen Java Basics - Anfänger-Themen 4
-horn- String im String suchen, womit? Java Basics - Anfänger-Themen 2
G String Suchen ersetzen replace_all() Java Basics - Anfänger-Themen 6
G Nach Datum suchen. Java Basics - Anfänger-Themen 4
M Rekursives suchen im TreeMenu Java Basics - Anfänger-Themen 10
G In DefaultTreeModel suchen Java Basics - Anfänger-Themen 2
G BST Suchbäume kleinsten Wert suchen Java Basics - Anfänger-Themen 3
G Zeichenkette suchen in Vector-Klasse Java Basics - Anfänger-Themen 11
G Suchen in Map nach Schlüssel? Java Basics - Anfänger-Themen 2
G Methode in API suchen Java Basics - Anfänger-Themen 3
S Anzahl von Zeichen in einem String suchen und zählen Java Basics - Anfänger-Themen 1
R maximum in integer array suchen Java Basics - Anfänger-Themen 29

Ähnliche Java Themen

Neue Themen


Oben