【问题标题】:Parsing Individual Lines of Multi-Line Text File?解析多行文本文件的单行?
【发布时间】:2026-01-13 12:00:01
【问题描述】:

我对我过去做过的某件事有疑问,但从未真正想过它是否是最有效的使用方法。

假设我有一个文本文件,其中每一行都包含一些重要内容,然后假设我有多组这些行,每行对应一个独特的环境......例如:

1
String that I need to parse for specific tokens..
2
String that I need to parse for specific tokens..
String that I need to parse for specific tokens..
3
String that I need to parse for specific tokens..
String that I need to parse for specific tokens..
String that I need to parse for specific tokens..

因此,鉴于上述输入文件,我过去解决此问题的方法类似于以下内容(半伪代码!):

BufferedReader inputFile = new BufferedReader(new FileReader("file.txt"));
while(inputFile.hasNextLine())
{    
     Scanner line = new Scanner(inputFile.nextLine());
     //parse the line looking for tokens

}

inputFile.close();

我的问题是,为 BufferedReader 中的每一行创建一个新的 Scanner 对象似乎非常低效。

有没有更好的方法来实现这个功能?

一个建议可能是通过标记扫描整个文档,但我的问题是我无法跟踪子集之外有多少字符串(由整数表示);或者至少我想不出其他解决方案,除了每次查看新行时减少一个计数器。

提前致谢!

【问题讨论】:

  • 在 Java 中解析字符串的方法有很多,但不涉及使用 Scanner。我很震惊谷歌搜索或搜索 SO 没有出现一个...
  • @BrianRoach 我也是,这就是我发布问题的原因。

标签: java file io


【解决方案1】:

看看这个;

public static void main(String[] args) throws IOException {

        BufferedReader bf = new BufferedReader(new FileReader(new File("d:/sample.txt")));
        LineNumberReader lr = new LineNumberReader(bf);
        String line = "";            
        while ((line = lr.readLine()) != null) {
            System.out.println("Line Number " + lr.getLineNumber() +
                    ": " + line);                
        }
    }

【讨论】: