我有个问题。我正在尝试读取一个大的.txt文件,但是我不需要里面的所有数据。

我的.txt文件如下所示:


  8000000 abcdefg hijklmn单词单词字母


我只需要说数字和前两个文本位置:“ abcdefg”和“ hijklmn”,然后将其写入另一个文件。我不知道如何只读写所需的数据。

到目前为止,这是我的代码:

    BufferedReader br = new BufferedReader(new FileReader("position2.txt"));
    BufferedWriter bw = new BufferedWriter(new FileWriter("position.txt"));
    String line;

    while ((line = br.readLine())!= null){
        if(line.isEmpty() || line.trim().equals("") || line.trim().equals("\n")){
            continue;
        }else{
            //bw.write(line + "\n");
            String[] data = line.split(" ");
            bw.write(data[0] + " " + data[1] + " " + data[2] + "\n");
        }

    }

    br.close();
    bw.close();

}


你能给我一些建议吗?
提前致谢

更新:
我的.txt文件有点奇怪。当它们之间只有一个“”时,使用上面的代码非常有用。我的文件可以有一个\ t或更多空格,或者\ t以及单词之间的一些空格。我现在可以继续吗?

最佳答案

根据数据的复杂性,您有几种选择。

如果行是用空格分隔的简单值,如图所示,则最简单的方法是拆分文本,然后将要保留的值写入新文件:

try (BufferedReader br = new BufferedReader(new FileReader("text.txt"));
     BufferedWriter bw = new BufferedWriter(new FileWriter("data.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        String[] values = line.split(" ");
        if (values.length >= 3)
            bw.write(values[0] + ' ' + values[1] + ' ' + values[2] + '\n');
    }
}


如果值可能更复杂,则可以使用正则表达式:

Pattern p = Pattern.compile("^(\\d+ \\w+ \\w+)");
try (BufferedReader br = new BufferedReader(new FileReader("text.txt"));
     BufferedWriter bw = new BufferedWriter(new FileWriter("data.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        Matcher m = p.matcher(line);
        if (m.find())
            bw.write(m.group(1) + '\n');
    }
}


这样可以确保第一个值仅是数字,第二个和第三个值仅是字字符(a-z A-Z _ 0-9)。

07-24 09:49
查看更多