我在一个文件中有几个字符串,我应该停止并从这些字符串中读取值。例如:
This is the first line
#1 stop = 300
This is the third line
This is the 4th line
#2 stop = 400
This is the 6th line
我需要在#1处停下并从那里提取值300。然后我必须停在#2并提取400,依此类推。
我对Java非常陌生,无法弄清楚我的代码有什么问题。 (我还没有提取价值):
public static void main(String[] args) throws IOException {
//read
File fromFile = new File("in.txt");
BufferedReader bufferedReader = new BufferedReader(new FileReader(fromFile));
String line;
String firstHandler="";
while ((line = bufferedReader.readLine()) != null) {
bufferedReader.readLine();
if (firstHandler.startsWith("#1")){
System.out.println(firstHandler);
String[] parts = firstHandler.split("=");
System.out.println(Arrays.toString(parts));
}
break;
}
System.out.println(line);
bufferedReader.close();
}
}
此时它只打印第一行,这根本不是我需要的。任何人都可以向我解释如何以正确的方式做到这一点吗?
答案 0 :(得分:3)
错误在以下四行中:
String firstHandler="";
while ((line = bufferedReader.readLine()) != null) {
bufferedReader.readLine();
if (firstHandler.startsWith("#1")){
您从while
语句中读取了一行。对于每行读取,您输入块。但在这个区块内,你还读到了另一条线。
然后,您与"#1"
进行比较的不是您刚读过的行,而是firstHandler
,它被初始化为空字符串一次,并且从未修改过。代码应该是:
while ((line = bufferedReader.readLine()) != null) {
if (line.startsWith("#1")) {
reader
也应在finally
块中关闭,但这是另一回事。
答案 1 :(得分:2)
首先,正如评论中所指出的,你需要匹配以#开头的行,因为有多行以#开头但是有不同的第二个字符。
接下来,您需要检查您正在阅读的行的值以检查#字符。因此,您可以删除firstHandler
变量并使用line
变量。
最后,你需要摆脱break
语句,因为这会导致循环在第一行本身之后退出。这就是你只能在屏幕上看到第一行的原因。
因此,您的代码可以更改为:
while ((line = bufferedReader.readLine()) != null)
{
if (line.startsWith("#"))
{
System.out.println(line);
String[] parts = line.split("=");
System.out.println(Arrays.toString(parts));
}
}