2012-04-10 7 views
0

Okay, ich habe eine andere Frage dazu gestellt, die ich inzwischen gelöst habe, aber hier ist eine kurze Erklärung dessen, was ich tun möchte: Ich möchte Text aus Textdateien als Token extrahieren - sagen wir mal ich habe eine Textdatei, die den Satz enthält:Token überspringen Whitespace?

Es ist ein gutes Restaurant,

glauben Sie mir!

Ich möchte den Inhalt von diesem als "Tokens" extrahieren - zum Beispiel wäre ein Token "It's", der nächste Token wäre "", der nächste wäre "a", dann "", dann "gut", dann "Restaurant", dann "," und "\ n", dann "glauben", "", "mich", "!". Also denke ich, dass Token entweder Wörter oder keine Wörter sind.

Hier ist mein Code so weit:

/** 
* Returns the next token, or throws a NoSuchElementException if none remain. 
*/ 
public Token next() { 
    if (c == -1) { 
     throw new NoSuchElementException(); 
    } 

    Writer sw=new CharArrayWriter(); 
    boolean trf=false; 
    try { 
     while (c != -1 && isWordCharacter(c)) { 
       sw.write(c); 
       c = r.read(); 
       trf=true; 
     } 
     while (c != -1 && !isWordCharacter(c)) { 
      if (Character.isWhitespace(c)&&!(trf==true)){ 
       sw.write(c); 
       c=r.read(); 
       } 
      else if (Character.isWhitespace(c)&&(trf==true)){ 
       c=r.read(); 
      } 
      else{ 
       sw.write(c); 
       c = r.read(); 

      } 
     } 
    } catch (IOException e) { 
     c = -1; 
     return new Token(trf, sw.toString()); 
    } 
    return new Token (trf, sw.toString()); 
} 

Das Problem ist, dass ich Leerzeichen überspringen, so anstatt sich: "Es ist", "", "a", "", "gut" etc, ich hole "Es ist", "a", "gut", ohne den Whitespace als Token zu berücksichtigen. Hat jemand irgendwelche Tipps, was falsch ist? Vielen Dank!

Antwort

0

Hier ist ein Link zu der reference.
StringTokenizer(String str, String delim, boolean returnDelims)

Wie das letzte Argument andeutet, wird es auch die Trennzeichen zurückgeben.

StringTokenizer str = new StringTokenizer(sentence," \n\r",true);

while(str.hasMoreTokens()) 
{ 
    System.out.println(str.nextToken()); 
} 

Dies sollte Sie geben, was Sie wollen. Ich hoffe es hilft.

+0

Wird das Token zusammen mit dem Trennzeichen gedruckt? – noMAD

+0

Ja, es werden auch die Trennzeichen gedruckt, probieren Sie es aus. – nikhil

0

Just do:

StringTokenizer str = new StringTokenizer(sentence); 
ArrayList<String> arr = new ArrayList<String>(); 
while(str.hasMoreTokens()) 
{ 
    //arr.add(" "); Be careful to add this only after the first word 
    arr.add(str.nextToken()); 
} 

Fügen Sie Ihre Logik " " nach jedem Zeichen inklusive. Es ist ganz einfach;)

+0

Es ist nicht notwendig, separate Logik zum Einschließen von Token hinzuzufügen, stringtokenizer stellt dafür einen Konstruktor zur Verfügung. – nikhil