2016-10-16 3 views
0

Ich brauche eine Hilfe. Ich muss ein Tokenisierungsprogramm schreiben. Ich lade eine Textdatei und teile sie in Token, aber ich muss auch die endgültige Anfangsposition der Wörter und die Wortlänge anzeigen (aus der Textdatei). Ich werde Ihnen für jede Hilfe sehr dankbar sein. Ich habe versucht, dies ohne Glück in den letzten 3 Tagen zu tun, hier ist das, was ich getan habe:Erstellen des Programms der Tokenisierung

import java.util.StringTokenizer; 
import java.io.*; 

public class Tokenizer1 { 

public static void main(String[] args) throws FileNotFoundException, IOException { 
    BufferedReader br = new BufferedReader(new FileReader("C://text.txt")); 
    FileWriter fw=new FileWriter("C://result.txt"); 
    PrintWriter pw=new PrintWriter(fw); 
    StringTokenizer st = new StringTokenizer(br.readLine()," "); 
    while (st.hasMoreTokens()) { 
     System.out.println(st.nextToken()); 
    } 
    String[] tokens = "".split(","); 
    int tokenStartIndex = 0; 
    for (String token : tokens) { 
     for (String token : str.split(", ")) { 
      System.out.println("token: " + token + ", tokenStartIndex: " + tokenStartIndex); 
      tokenStartIndex += token.length() + 1; 
     } 
    } 
} 
+0

was ist Ihre eigentliche Frage oder Problem? –

Antwort

0

dies ein Versuch, wenn Sie nicht über die Datei Zeile für Zeile verarbeiten müssen:

public static void main(String[] args) throws FileNotFoundException, IOException { 
    FileInputStream fis = new FileInputStream("C:/text.txt"); 
    StringBuilder sb = new StringBuilder(); 

    int c; 
    while((c = fis.read()) != -1) { 
     sb.append((char)c); 
    } 
    fis.close(); 

    System.out.println(sb.toString()); 
    System.out.println("---------------------"); 

    int start = 0; 

    // OPTION 1: using String.split method 
    String[] tokens = sb.toString().split("[\\s,]+"); 
    for(String t : tokens) { 
     System.out.println("START: " + start + "\tLENGTH: " + t.length() + "\tWORD: " + t); 
     start += t.length(); 
    } 

    start = 0; 

    // OPTION 2: using StringTokenizer class 
    StringTokenizer st = new StringTokenizer(sb.toString(), ",\t\n\f\r"); 
    while(st.hasMoreTokens()) { 
     String next = st.nextToken(); 
     System.out.println("START: " + start + "\tLENGTH: " + next.length() + "\tWORD: " + next); 
     start += next.length(); 
    } 
} 

Wenn Sie die Datei Zeile für Zeile verarbeiten müssen, vielleicht wollen Sie versuchen, diese ein:

public static void main(String[] args) throws FileNotFoundException, IOException { 
    BufferedReader br = new BufferedReader(new FileReader("C:/text.txt")); 

    StringBuilder sb = new StringBuilder(); 
    String line; 
    int lineNumber = -1; 
    while ((line = br.readLine()) != null) { 
     ++lineNumber; 
     sb.append(line); 
     System.out.println("\nLINE: " + lineNumber); 
     int elementPosition = 0; 

     // OPTION 1: using String.split method 
     /*String[] lineContents = line.split("[\\s,]+"); 
     for (String content : lineContents) { 
      System.out.println("\tSTART: " + elementPosition + "\tLENGTH: " + content.length() + "\tWORD: " + content); 
      elementPosition += content.length(); 
     }*/ 

     // OPTION 2: using StringTokenizer class 
     StringTokenizer st = new StringTokenizer(sb.toString(), ",\t\n\f\r"); 
     while(st.hasMoreTokens()) { 
      String next = st.nextToken(); 
      System.out.println("\tSTART: " + elementPosition + "\tLENGTH: " + next.length() + "\tWORD: " + next); 
      elementPosition += next.length(); 
     } 
    } 
    br.close(); 
} 

ich hoffe, das hilft.

+0

Ja, es funktioniert gut, vielen Dank. Aber ist es möglich, eine Tokenisierung von einer Datei mit der Klasse StringTokenizer durchzuführen? – Lana

+0

Es ist möglich, jedoch StringTokenizer ist eine Legacy-Klasse: StringTokenizer ist eine Legacy-Klasse, die aus Kompatibilitätsgründen beibehalten wird, obwohl ihre Verwendung in neuem Code entmutigt wird. Es wird empfohlen, dass jeder, der diese Funktionalität sucht, stattdessen die Split-Methode von String oder das Paket java.util.regex verwendet. http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html –

+0

Ich habe die Antwort für Sie bearbeitet, um auch StringTokenizer-Lösungen einzuschließen. –

Verwandte Themen