2016-10-16 24 views
0

私は助けが必要です。私はトークン化のプログラムを書く必要があります。私はテキストファイルを読み込んでそれをトークンに分割しますが、単語の最後の最初の位置と単語の長さ(テキストファイルから)も表示する必要があります。私はどんな助けでもあなたにとても感謝しています。私はここで、運と、過去3日間のためにこれを行うにしようとしてきた私がやっていることです:トークン化プログラムの作成

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

あなたの実際の質問や問題は何ですか? –

答えて

0

あなたが行毎にファイルを処理する必要がない場合は、この方法を試してください。

あなたが行毎にファイルを処理する必要がある場合は
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(); 
    } 
} 

、あなたはこれを試してみてくださいしたい場合があります

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(); 
} 

私はこのことができます願っています。

+0

はい、うまくいきます、ありがとうございます。しかし、クラスStringTokenizerを使用してファイルからトークン化を実行することは可能ですか? – Lana

+0

StringTokenizerはレガシークラスですが、StringTokenizerは新しいコードでの使用は推奨されませんが、互換性の理由から保持されるレガシークラスです。この機能を求めている人は、Stringのsplitメソッドまたはjava.util.regexパッケージを代わりに使用することをお勧めします。 http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html –

+0

StringTokenizerソリューションを組み込むための答えを編集しました。 –