Java 出现字符串标记化错误

Java 出现字符串标记化错误,java,stringtokenizer,Java,Stringtokenizer,有一个文本文件,我们从中读取,然后我们想在对其他文本文件进行一些小的更改后再编写它,但问题是,如果我们使用它,为什么会有不同的结果 System.out.println以及何时使用pwPaperAuthor.println System.out.println(element[0]+"@"+author+"@"+element[2]);------>620850@Henk Ern 代码如下: package cn.com.author; import java.io.BufferedR

有一个文本文件,我们从中读取,然后我们想在对其他文本文件进行一些小的更改后再编写它,但问题是,如果我们使用它,为什么会有不同的结果 System.out.println以及何时使用pwPaperAuthor.println

System.out.println(element[0]+"@"+author+"@"+element[2]);------>620850@Henk Ern
代码如下:

package cn.com.author;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

//input:"IndexAuthors1997-2010.txt"
//output:"PaperAuthor1997-2010.txt"
public class PaperAuthors {

    public static void main(String[] args) {

        BufferedReader brIndexAuthors = null;

        BufferedWriter bw = null;

        PrintWriter pwPaperAuthor = null;

        try {
            brIndexAuthors = new BufferedReader(new InputStreamReader(
                    new FileInputStream("IndexAuthors1997-2010.txt")));
            bw = new BufferedWriter(new FileWriter(new File(
                    "PaperAuthor1997-2010.txt")));
            pwPaperAuthor = new PrintWriter(new OutputStreamWriter(
                    new FileOutputStream("PaperAuthor1997-2010.txt")));
            /*
             * line = brIndexAuthors.readLine();
             * 
             * element=line.split("@"); String author=null; StringTokenizer st =
             * new StringTokenizer(element[1],","); while(st.hasMoreTokens()) {
             * author = st.nextToken(); pwPaperAuthor.println(element[0] + "+" +
             * author); //~i++; }
             */
            String line = null;
            String element[] = new String[3];
            String author = null;
            int i = 0;
            while ((line = brIndexAuthors.readLine()) != null) {
                element = line.split("#@");
                StringTokenizer st = new StringTokenizer(element[1], ",");

                int num=st.countTokens();

                while (st.hasMoreTokens()) {
                    author = st.nextToken();
                     pwPaperAuthor.println(element[0]+"@"+author+"@"+element[2]);
                    bw.write(element[0] + "@" + author + "@" + element[2]);
                    bw.newLine();
                    System.out.println(element[0]+"@"+author+"@"+element[2]);
                    i++;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }
    }
}
System.out.println(element[0]+"@"+author+"@"+element[2]);------>620850@Henk Ern
输出 如果

System.out.println(element[0]+"@"+author+"@"+element[2]);------>620850@Henk Ern
如果

System.out.println(element[0]+"@"+author+"@"+element[2]);------>620850@Henk Ern

使用基于流的API,无法在同一个循环中读取和写入文件。您必须创建一个新文件,复制所有相同的内容,添加新内容。您现在所做的事情具有不可预测的行为。如果您仍然希望同时读写,则必须使用RandomAccessFile,但这要复杂得多。

使用…流类和…Reader/…Writer类的主要区别在于流处理原始字节,而后者处理字符。处理字符需要指定特定的字符编码;各种形状的Unicode UTF-8、UTF-16。。。有没有其他更简单的方法来解决这个问题?每个人都在做并且觉得很简单的第一个建议是:创建一个新的临时文件,完成后删除旧文件并重命名。
System.out.println(element[0]+"@"+author+"@"+element[2]);------>620850@Henk Ern