Создание программы токенизации

#java #tokenize #stringtokenizer

#java #токенизировать #stringtokenizer

Вопрос:

Мне нужна помощь. Я должен написать программу токенизации. Я загружаю текстовый файл и разбиваю его на токены, но мне также нужно отобразить конечную, начальную позицию слов и длину слова (из текстового файла). Я буду очень благодарен вам за любую помощь. Я безуспешно пытался сделать это в течение последних 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;
        }
    }
}
 

Комментарии:

1. в чем ваш актуальный вопрос или проблема?

Ответ №1:

Попробуйте это, если вам не нужно обрабатывать файл построчно:

 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(), ",tnfr");
    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(), ",tnfr");
        while(st.hasMoreTokens()) {
            String next = st.nextToken();
            System.out.println("tSTART: "   elementPosition   "tLENGTH: "   next.length()   "tWORD: "   next);
            elementPosition  = next.length();
        }
    }
    br.close();
}
 

Я надеюсь, что это поможет.

Комментарии:

1. Да, это работает хорошо, большое спасибо. Но возможно ли выполнить токенизацию из файла с помощью класса StringTokenizer?

2. Это возможно, однако StringTokenizer — это устаревший класс: StringTokenizer — это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование в новом коде не рекомендуется. Рекомендуется, чтобы любой, кто ищет эту функциональность, вместо этого использовал метод разделения строки или пакет java.util.regex . docs.oracle.com/javase/7/docs/api/java/util /…

3. Я отредактировал ответ для вас, чтобы вы также включили решения StringTokenizer.

4. Понятно, спасибо, что помогли мне. И если мне нужно вывести все результаты в другой файл, я должен использовать FileWriter fw=new FileWriter("C://compile_results.txt"); PrintWriter pw=new PrintWriter(fw); , я прав? а затем, используя System.out.println() , как я мог это сделать…

5.Да, вы правы, вам нужно использовать FileWriter и PrintWriter. FileWriter fw = new FileWriter("C://compile_results.txt"); PrintWriter pw = new PrintWriter(fw); Вызов System.out.println() приведет к записи в стандартный вывод (обычно в консоль), который не является тем, что вы хотите. Что вы хотите, так это вызвать pw.print() метод для записи строки в файл. После того, как вы закончили писать, вы должны закрыть объект pw вызовом pw.close() . Это также закроет FileWriter.