Array aus Tokenizer

Status
Nicht offen für weitere Antworten.

Spunk

Mitglied
Hi!

Wieso nimmt mein array wort[] die wörter aus dem tokenizer nicht auf??? bei der ausgabe kommt immer nur null!!


Code:
   for ( int tval; (tval = st.nextToken()) != StreamTokenizer.TT_EOF; ) 
{ 
if ( tval == StreamTokenizer.TT_WORD ) 
{ 
if(st.sval.length()>3) 
{ 
wort[k]=st.sval; 
k++; 
} 
}

Danke :roll:
 
ich geh mal davon aus, dass du auch debuggt hast, dass die Wörter mind. länge 3 haben...

ansonten muss ich sagen, habe ich in meinem Programmierzeit ein solches Konstrukt noch nie gesehen....
Tokenizers verwende ich immer:

Code:
 // wort ist das zu zerlegende Wort, delimiter das Trennzeichen
StringTokenizer tokens = new StringTokenizer(wort, delimiter);

while(tokens.hasMoreTokens()) {
  String token = tokens.nextToken();
  // nun mach was mit dem token:
}
find ich übersichtlicher und logischer....
 
Wenn du den String mit Hilfe eines StringTokenizer in einzelne Wörter zerlegen und in ein Array speichern möchtest, kannst du das so machen:

Code:
import java.util.StringTokenizer;

public class Tokenizer
{
	public static void main(String[] args)
	{
	    //Text 
	    String text = "Alles ist moeglich!";
	    
	    //Texttrennzeichen
	    String trennzeichen = " " + "!";
	    
	    //StringTokenizer erstellen
	    StringTokenizer tokens = new StringTokenizer(text, trennzeichen);
	    
	    //Array erstellen
	    String[] array = new String[tokens.countTokens()];
	    
	    //Text zerlegen und in Array speichern
	    for(int i = 0; tokens.hasMoreTokens(); i++){
	        array[i] = tokens.nextToken();
	    }
	    
	    //Ausgabe
	    for(int i = 0; i < array.length; i++){
	        System.out.println((i+1) + ". Wort:\t" + array[i]);
	    }
	}
}
 
Hmmm ich hätt da jetzt doch nochmal ne Frage, und zwar liegt der String ja in Form eines InputStreams vor, also liegt in ner Datei.. wenn ich das jetzt so mache krieg ich ständig Fehlermeldungen =(
 
Kannst du deinen InputStream nicht in einen String auslesen? Oder noch besser (performanter) -> in einen StringBuffer und nach dem Beenden des Streams in einen String umwandeln.
 
Code:
FileReader f =  new FileReader("text.txt");

       String text = f.toString();
       
       String trennzeichen = " " + "!" + "?" + "." + ",";

      StringTokenizer tokens = new StringTokenizer( text, trennzeichen );



so richtig? also zumindest kommt kein fehler mehr =)

Edit: Code Tags benutzen /Stefan1200
 
Falls es so funktionieren sollte...ein WUNDER!! 😀

Ansonsten:

Code:
        String text = "";
        String puffer = "";
        
        BufferedReader r;
        
        try{
            r = new BufferedReader(new FileReader("Datei.txt"));
        
            while((puffer = r.readLine()) != null){
                text += puffer;
            }
            
            r.close();
        }catch(IOException e){
            System.out.println("Lesefehler");
        }
 
Nein, nicht ganz.
Wenn du folgendes aufrufst:

Code:
File file = new File("/pfad/test.txt");
String st = file.toString();

Dann wird deinem String der Wert /pfad/test.txt zugewiesen.
Siehe: http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html

Code:
String text = null;

try {
 File file = new File("/pfad/test.txt");
 
 BufferedReader buff = new BufferedReader(new FileReader(file));
 
 text = buff.readLine();
} catch(IOException ioe) {
 System.out.println(ioe.getMessage());
}

Habe den Code nicht getestet, aber so sollte es in etwa gehen, falls dein File nur aus einer einzigen Zeile besteht. Sonst musst du einfach noch eine Schleife um buff.readLine() herum machen.

Code:
while(true) {
 String temp = buff.readLine();
  
 if(temp == null) {
  break;
 }

 text = text + temp;
}

EDIT: Da war wohl einer schneller.
Wie gesagt ist es logisch, dass es funktioniert. Denn das String-Objekt wird ja mit Inhalt gefüllt, einfach nicht mit dem erwünschten 🙂
 
Spunk hat gesagt.:
Code:
FileReader f =  new FileReader("text.txt");
       String text = f.toString();  
      String trennzeichen = " " + "!" + "?" + "." + ",";
      StringTokenizer tokens = new StringTokenizer( text, trennzeichen );
so richtig? also zumindest kommt kein fehler mehr =)
1. Bitte immer Code Tags benutzen !!

das erste problem wurde schon besprochen.
Dein Trennzeichen glaubt stimmt nicht ganz, ich denke du willst " ", !, ?, . und , als Trenner haben, so aber hast du als Trennzeichen: " !?.," - da du Strings konkatinierst (?)...
meines wissens kennt der Tokenizer keine mehrfach trenner...

also dann entweder selber schreiben oder über split() bzw. regex teilen (dann aber erst ab 1.4 nutzbar)
 
Ne, einfach alle Trennzeichen zusammen in einem String übergeben...das passt schon, ganz sicher😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben