Java 从bufferedReader获取当前行号

Java 从bufferedReader获取当前行号,java,bufferedreader,filereader,Java,Bufferedreader,Filereader,我想阅读不同的文本文件,我使用BufferedReader,如下所示: int theMax = 0; int theTypes = 0; int []theSlices = {}; /* INPUT1: 17 4 2 5 6 8 INPUT2: 100 10 4 14 15 18 29 32 36 82 95 95

我想阅读不同的文本文件,我使用BufferedReader,如下所示:

int theMax = 0;
    int theTypes = 0;
    int []theSlices = {};
    /*
        INPUT1:
        17 4
        2 5 6 8  

        INPUT2:
        100 10
        4 14 15 18 29 32 36 82 95 95                                

    */

    try {
        FileReader reader = new FileReader("INPUT1.in");
        BufferedReader bufferedReader = new BufferedReader(reader);

        String line;

        while ((line = bufferedReader.readLine()) != null) {
            String[] numbers = line.split(" ");

            System.out.println(numbers[0]);
            System.out.println(line);
        }
        reader.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    ;
我的问题是,我想为最大值、类型和片设置值,但为此,我需要获取当前行号,我不知道如何进行设置。读取文件可以工作,printlnumbers[0]打印17和2。我有点困在这里,所以我很高兴能得到大家的帮助

输入1的示例: 最大值=17 类型=4
片=2 5 6 8非常简单:你跟踪自己

    String line;
    int currentLine = 0;

    while ((line = bufferedReader.readLine()) != null) {
        String[] numbers = line.split(" ");

        System.out.println("Linenumber " + currentLine);
        System.out.println(numbers[0]);
        System.out.println(line);
        currentLine ++;
    }
    reader.close();

很简单:你自己跟踪自己

    String line;
    int currentLine = 0;

    while ((line = bufferedReader.readLine()) != null) {
        String[] numbers = line.split(" ");

        System.out.println("Linenumber " + currentLine);
        System.out.println(numbers[0]);
        System.out.println(line);
        currentLine ++;
    }
    reader.close();

不确定我是否完全理解您的目的,但为了跟踪行号,请在while循环中创建一个递增的变量

i、 e


不确定我是否完全理解您的目的,但为了跟踪行号,请在while循环中创建一个递增的变量

i、 e


首先,据我所知,并且已经阅读了这里的官方Java文档,BufferedReader类本身并没有为您提供一种机制,例如确定当前行的getCurrentLine方法

然而,绝对没有什么可以阻止您自己通过计数器变量跟踪当前行号

因此,代码的相关部分如下所示:

        int currentLine = 0;
        while ((line = bufferedReader.readLine()) != null) {
            currentLine++;

            String[] numbers = line.split(" ");

            /* NOTE: this can be numbers.length >= 2 if you don't care to enforce 
            having exactly 2 numbers as the first line 
            */
            if(currentLine == 1 && numbers.length == 2) {
                    theMax = Integer.valueOf(numbers[0]);
                    theTypes = Integer.valueOf(numbers[1]);
            } else {
                for(int index = 0; index < numbers.length; index++) {
                        theSlices[index] = Integer.valueOf(numbers[index]);
                }
            }
        }
        // do something with read values
可简化为:

        BufferedReader bufferedReader = new BufferedReader(new FileReader("INPUT1.in"));
然后,如果坚持使用try而不是try with resources,则只需要管理bufferedReader实例

希望这有帮助


PS:并不是说我上面的代码片段是完美的,我相信它可以写得更干净。

首先,据我所知,并且已经阅读了这里的官方Java文档-,BufferedReader类本身并没有为您提供一种机制,例如确定当前行的getCurrentLine方法

然而,绝对没有什么可以阻止您自己通过计数器变量跟踪当前行号

因此,代码的相关部分如下所示:

        int currentLine = 0;
        while ((line = bufferedReader.readLine()) != null) {
            currentLine++;

            String[] numbers = line.split(" ");

            /* NOTE: this can be numbers.length >= 2 if you don't care to enforce 
            having exactly 2 numbers as the first line 
            */
            if(currentLine == 1 && numbers.length == 2) {
                    theMax = Integer.valueOf(numbers[0]);
                    theTypes = Integer.valueOf(numbers[1]);
            } else {
                for(int index = 0; index < numbers.length; index++) {
                        theSlices[index] = Integer.valueOf(numbers[index]);
                }
            }
        }
        // do something with read values
可简化为:

        BufferedReader bufferedReader = new BufferedReader(new FileReader("INPUT1.in"));
然后,如果坚持使用try而不是try with resources,则只需要管理bufferedReader实例

希望这有帮助

PS:并不是说我上面的代码片段是完美的,我相信它可以用java.io.LineNumberReader写得更清晰

LineNumberReader是BufferedReader的一个子类,用于跟踪行号。它提供了获取当前行号的getLineNumber方法

例如:

使用java.io.LineNumberReader

LineNumberReader是BufferedReader的一个子类,用于跟踪行号。它提供了获取当前行号的getLineNumber方法

例如:


如果删除try/catch块,这将是一个更好的答案。盲目地用零填充数组可能不是对格式错误的输入字符串的最佳响应。如果删除try/catch块,这将是一个更好的答案。盲目地用零填充数组可能不是对格式错误的输入字符串的最佳响应。