# Suchen im Text



## celloman (19. Oktober 2007)

Hy Leute

in eine Datei möchte ich nach ("Part: 1 (47)")) suchen.



```
private static void insert(String val){
        StringTokenizer st = new StringTokenizer(val);
        int i = 0;
        while(st.hasMoreTokens())
            {
            if(st.nextToken().equals("Part: 1 (47)"))
                {
                i++;
                st.nextToken();
                }
            }
        System.out.println("In der Datei ist das Wort Part: " + i + " mal enthalten");
        
      
   
    }
```


funktioniert nicht was ist da nicht in ordnung

MFG


----------



## Ronin-Jay (19. Oktober 2007)

Das kann auch nicht funktionieren. Der Tokenizer zerlegt Dir den String. Laß Dir mal immer st.nextToken() ausgeben.....:


```
Part:
1
(47)
```

Es gibt also kein Element 'Part: 1 (47)'
Wenn Du es als klares Trennelement haben möchtest, nutz z.B. einfach Part_1_(47). Das wird als ein Elemt erkannt.


----------



## celloman (19. Oktober 2007)

Hy 

in der Datei ist es nicht so angegeben Part_1_(47).in der Datei steht Part 1 (47). und die will ich suchen .

MFG


----------



## Ronin-Jay (19. Oktober 2007)

celloman hat gesagt.:


> Hy
> 
> in der Datei ist es nicht so angegeben Part_1_(47).in der Datei steht Part 1 (47). und die will ich suchen .
> 
> MFG



Hast Du Dir mal die Ausgabe angeschaut, die Dein Tokenizer erzeugt!? Dann weißt Du, warum er nichts findet....
Alternativ könntest Du bei diesem Weg einfach fragen, wenn 1 Token 'Part' ist, folgt dann '1' und danach '(47)'... Ist zwar nicht schön, aber eine Lösung.


----------



## celloman (19. Oktober 2007)

wenn das schlecht ist 

kannst du mir dann eine andere alternative sagen 

Danke


----------



## Ronin-Jay (19. Oktober 2007)

Sorry, aber dafür kenne ich mich zu wenig mit Java aus, als Dir eine professionelle Lösung anzubieten.

Das "Part: 1 (47)" steht alleine in einer Zeile? Vielleicht  hilft es die externe Datei Zeile für Zeile einzulesen und dann könntest Du vergleichen, aber dann wirst Du wohl wieder mit Deinen Werten Probleme bekommen, wenn ich mich recht entsinne.


----------



## celloman (19. Oktober 2007)

trotzdem Danke


----------



## Anime-Otaku (19. Oktober 2007)

Wie wir dir schon im letzten (der vielen) Thread(s) versucht haben mitzuteilen, ist der Stringtokenizer dazu da, einen String nach einem bestimmten Trennzeichen(folge) zu trennen und nicht dazu zu Suchen.

Dafür ist z.B. die indexOf Methode der String Klasse da, die wir dir auch schon mehrmals nahegelegt haben, ohne Erfolg.

Dazu möchte ich, was ich selten tue, auf die Netiquette verweisen:


> Bitte erstelle keine Doppel-/Mehrfach-/Pushpostings. Dazu zählen insbesondere das Erstellen identischer Themen in mehreren unterschiedlichen Unterforen, das mehrfache oder erneute Einstellen eines bereits vorhandenen Themas.



Dazu hast du die aller selbe Frage Stellung in 3 anderen Foren gestellt und dort auch teilweise zich Threads erstellt...


----------



## celloman (23. Oktober 2007)

Hallo Leute 

ich lese eine Datei zeilenweise in einen String.
und überprüfe es nach einem Word.

das Word kann nicht gefunden Weden obwol das Word in der Datei orhanden ist.


```
String findMe = "MaFrame";
		int searchMeLength = line.length();
		int findMeLength = findMe.length();
		boolean foundIt = false;
		for (int i = 0; i <= (searchMeLength - findMeLength); i++) {
		   if (line.regionMatches(i, findMe, 0, findMeLength)) {
		      foundIt = true;
		      System.out.println(line.substring(i, i + findMeLength));
		      break;	
		   }
		}
		if (!foundIt) System.out.println("No match found.");
```


----------



## TheBodo (23. Oktober 2007)

Ich gehe mal davon aus, dass du das Wort nur finden willst oder?

Wie wärs dann hiermit:


```
if ( isInData( BufferedReader f = new BufferedReader(new FileReader(""C:\BSP.txt"))) 
    System.out.println("String found!");
else 
    System.out.println("String not found!");
```


```
public boolean isInData(BufferedReader reader, String findMe) {
    Boolean exists = false;
    String line;
    while ( (line  = reader.readLine() ) != null && ( !exists) )
        exists = line.contains(findMe);
    return exists;
}
```

Bitte!


----------



## celloman (23. Oktober 2007)

wo soll ich das einfügen, soll ich ein neues Objekt erzeugen

MFG


----------



## Tobias Köhler (23. Oktober 2007)

Füge es da ein, wo du es benutzen willst^^


----------



## celloman (23. Oktober 2007)

Dies ist ein Code

Ich weis nicht wo ich das jetzt einfügen soll.


```
public static void main(String[] args)throws IOException{
        String line;                     //String line
        String value="";                //String mit einer unedlichen Länge
        try{ 
            File f = new File ("c:/test1.txt"); //die zu lesende Datei
            BufferedReader input = new BufferedReader(new FileReader(f)); //FileReader und FileWriter generieren
            while((line = input.readLine()) != null) {  //whileschleife um die Datei Zeilenweise auszugebenSystem.out.println(line);
                value += line+ "\r\n";                      //übergabe der Stringinhalt line an value
                
                
                
                
                System.out.println(line);
            }    
            input.close();                             //schließen von BufferWriter
        
        }
        catch (IOException e) {
            System.out.println("Datei nicht vorhanden!");
            e.printStackTrace();
        }
```


----------



## TheBodo (23. Oktober 2007)

Da wo geprüft werden soll ob es in der Datei ist, die Funktion prüft es und die If Anweisung (Achtung verändert) gibt, wenn die Funktion true zurückgibt "String found!" aus und wenn sie false zurückgibt "String not found!"


----------



## TheBodo (23. Oktober 2007)

Dein Code gibt die Datei aus! ich dachte du willst den String finden!


----------



## celloman (23. Oktober 2007)

hy ich möchte in der Datei nach einem Wort  suchen, um ab dort irgend welche funktionen durchzuführen.

mit dem vorigen code von mir hat es das gesuchte Word nicht gefunden.
jetzt bin ich auf der suche.


----------



## zerix (23. Oktober 2007)

Dein Code den du aber vorhin gepostet hast, hat einfach nur die Datei ausgegeben und hat nach nichts gesucht. 

Ich würde dir aber mal empfehlen, dass du dir die Java-Grundlagen anschaust. Bodo hatte dir nämlich eine komplette Methode gepostet. Es ist schlecht, wenn man nicht weiß, wo man eine Methode hinkopiert und auch nicht weiß wie man sie einsetzt. 


Du musst einfach diese Methode in eine Klasse von dir kopieren und sie dort aufrufen, wo du die Überprüfung hast.


MFG

zEriX


----------



## MiMi (23. Oktober 2007)

Ich wuerd sagen, er hat keinen blassen schimmer was er da macht.


----------



## Tobias Köhler (23. Oktober 2007)

Guck dir die Insel an, vll hilft dir die ja weiter..... fast schon wie eine Bibel für Java-Neulinge^^


----------



## TheBodo (23. Oktober 2007)

```
public static void main (String[] args) {
String inhalt, findMe = "xxx";
try {
    BufferedReader f =  new BufferedReader(new FileReader("C:\test.txt"))
    if ( isInData ( f ,  findMe )) {
        inhalt = getData( f );
        wasIchMachenWill( inhalt.split(findMe)[1] );
    }
}

public String getData(BufferedReader reader) {
  String line, inhalt = "";
    while ( (line = reader.readLine() ) != null && ( !exists) )
        inhalt += line;
    return inhalt;
}

public boolean isInData(BufferedReader reader, String findMe) {
    Boolean exists = false;
    String line;
    while ( (line  = reader.readLine() ) != null && ( !exists) )
        exists = line.contains(findMe);
    return exists;
}
```


----------



## celloman (23. Oktober 2007)

zerix ich würde dann mal eine seite zurückgehen und mir mal anschaue was ich dafor geschickt habe.

nur zu info


----------



## MiMi (23. Oktober 2007)

Gut, jetzt kann er sich das kopiern, und schnallt immer noch net, warum das so geht.


----------



## zerix (23. Oktober 2007)

celloman hat gesagt.:
			
		

> zerix ich würde dann mal eine seite zurückgehen und mir mal anschaue was ich dafor geschickt habe.
> 
> nur zu info



Ich weiß wo du das gepostet hast, ich hab das lediglich gesagt, weil du das gepostet hast



			
				celloman hat gesagt.:
			
		

> hy ich möchte in der Datei nach einem Wort suchen, um ab dort irgend welche funktionen durchzuführen.
> 
> mit dem vorigen code von mir hat es das gesuchte Word nicht gefunden.
> jetzt bin ich auf der suche.



Aber dazu direkt davor einen anderen Quelltext.

MFG

zEriX


----------



## celloman (23. Oktober 2007)

hy,mimij85

wnn ich mir den code anschau verstehe ich ihn selbstverständlich.

es funktioniert nicht obwol ich es kopiert habe, es zeigt bei mir lauter fehler an, ich sage jetzt nicht das der code falsch ist.

liegt es vielleicht daran weil Ich NetBeans verwende


----------



## TheBodo (23. Oktober 2007)

Dann musst du mal sagen was für Fehler er ausgibt!

Sonst kann man dir nicht helfen! Aber ganz ehrlich dass ist eigentlich eine Sache, die jeder können sollte und wenn nich dann solltest du evtl wirklich mal lernen!


----------



## zerix (23. Oktober 2007)

Es hat nichts mit der Entwicklungsumgebung zu tun. Das ist aber das was ich mit Grundlagen meinte. 

Du solltest nämlich die anderen Methoden auch static deklarieren.

MFG

zEriX


----------



## Tobias Köhler (23. Oktober 2007)

Jeder hat andere Ziele. Einige wollen das lernen, andere eben nur ihr Problem lösen


----------



## celloman (23. Oktober 2007)

hy Zerix

ich meinte das hir


```
String findMe = "MaFrame";
		int searchMeLength = line.length();
		int findMeLength = findMe.length();
		boolean foundIt = false;
		for (int i = 0; i <= (searchMeLength - findMeLength); i++) {
		   if (line.regionMatches(i, findMe, 0, findMeLength)) {
		      foundIt = true;
		      System.out.println(line.substring(i, i + findMeLength));
		      break;	
		   }
		}
		if (!foundIt) System.out.println("No match found.");
```


MFG


----------



## zerix (23. Oktober 2007)

Ich weiß, du hast danach aber noch mal einen Quelltext gepostet, darauf hat einer gesagt, dass du da gar nichts suchst. 
Dann hast du nochmal das gesagt, 


> hy ich möchte in der Datei nach einem Wort suchen, um ab dort irgend welche funktionen durchzuführen.
> 
> mit dem vorigen code von mir hat es das gesuchte Word nicht gefunden.
> jetzt bin ich auf der suche.



Darauf kam dann mein Post.

MFG

zEriX


----------



## TheBodo (23. Oktober 2007)

Ich möchte mich dafür entschuldigen, wenn meine Sachen nicht funktionieren!

Aber wenn ich hier antworte, dann schreib ich das im Browser, da sind Tippfehler oder so nie ausgeschlossen! Du solltest aber Fehler selbst beheben können, weiterhin sollte es dir zeigen wie man es genereell angeht!


----------



## celloman (23. Oktober 2007)

ok 

ich danke euch allen trotzdem.



MFG


----------



## Arnulf1 (23. Oktober 2007)

Gas Ganze sieht wohl so aus:

package ConsoleApplication1;
import java.util.Scanner;
import java.io.*;
/**
 * Summary description for Program

*/


public class Program
{   String line;                     
	String value=""; 

        try { 
            File f = new File ("c:/test1.txt"); 
            BufferedReader input = new BufferedReader(new FileReader(f)); 
	        while((line = input.readLine()) != null) {  
            value += line+ "\r\n";                 

                 if (line.contains("Part 1 (47)")){break}
                System.out.println(line);
            }    
            input.close();                           

        }
        catch (IOException e) {
            System.out.println("Abschnitt nicht vorhanden!");
            e.printStackTrace();
        }
	public static void main(String[] args)
	{
		//
		// TODO: Add code to start application here
		//
		return;
	}
}

---------------------------------------------------------------------------
Nur bei mir ist unter dem "try" eine rote Underline. Was mache ich falsch?


----------



## MiMi (23. Oktober 2007)

Benutz bitte die [.CODE] code [./CODE] Funktion ( ohne die Punkte), dann ist es uebersichtlicher


----------

