#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.