Java 从bufferedReader获取当前行号
我想阅读不同的文本文件,我使用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
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块,这将是一个更好的答案。盲目地用零填充数组可能不是对格式错误的输入字符串的最佳响应。