Java 如何读取文本文件中的特定行并返回其中的一部分?

Java 如何读取文本文件中的特定行并返回其中的一部分?,java,parsing,text,bufferedreader,Java,Parsing,Text,Bufferedreader,我在一个文件中有几个字符串,我应该在其中停止并读取这些字符串中的值。例如: 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非常陌生,不知道我的代码出了什么问题。(我还没有提取这些值): 在这一点上,它只打印第一行

我在一个文件中有几个字符串,我应该在其中停止并读取这些字符串中的值。例如:

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非常陌生,不知道我的代码出了什么问题。(我还没有提取这些值):


在这一点上,它只打印第一行,这根本不是我需要的。有没有人能向我解释一下如何以正确的方式完成这项工作?

错误在以下四行:

    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")) {

读取器
也应该在
finally
块中关闭,但那是另一回事。

错误在这4行中:

    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")) {

读取器
也应该在
finally
块中关闭,但这是另一回事。

首先,正如注释中指出的,您需要匹配以#开头的行,因为有多行以#开头,但具有不同的第二个字符

接下来,需要检查正在读取的行的值以检查#字符。因此,您可以去掉
firstHandler
变量,改用
变量

最后,您需要去掉
break
语句,因为这会导致循环在第一行之后退出。这就是为什么你只能在屏幕上看到第一行

因此,您的代码可以更改为以下内容:

while ((line = bufferedReader.readLine()) != null) 
        {                
         if (line.startsWith("#"))
           {
            System.out.println(line);
            String[] parts = line.split("=");   
            System.out.println(Arrays.toString(parts));  
           } 
         }

首先,正如评论中指出的,您需要匹配以#开头的行,因为有多行以#开头,但第二个字符不同

接下来,需要检查正在读取的行的值以检查#字符。因此,您可以去掉
firstHandler
变量,改用
变量

最后,您需要去掉
break
语句,因为这会导致循环在第一行之后退出。这就是为什么你只能在屏幕上看到第一行

因此,您的代码可以更改为以下内容:

while ((line = bufferedReader.readLine()) != null) 
        {                
         if (line.startsWith("#"))
           {
            System.out.println(line);
            String[] parts = line.split("=");   
            System.out.println(Arrays.toString(parts));  
           } 
         }


您需要进一步概括您的模式。除了只查找#1之外,您还需要能够查找#'if(firstHandler.startsWith(“#1”){'对于您的purpouse看起来不正确,而应该使用分隔符“#”,因此您的代码应该是这样的'if(firstHandler.startsWith(“#”){'打开文件时不指定编码,您需要进一步概括您的模式。不要只查找#1,您需要能够查找#1后面的任何数字,如果(firstHandler.startsWith(“#1”){对于您的purpose看起来不正确,请使用分隔符“#”,因此您的代码应该是这样的'if'(firstHandler.startsWith(“#”){打开文件时不指定编码太棒了…现在你的解释已经有一段时间了…+1!!:)我认为分隔符也有问题,它应该是“#”而不是“#1”,因为“#1”只会读取第一行哦@NoobEditor得到了+1:)@JB Nizet
if(line.startsWith(“#1”))
很有意义,谢谢。但是,它仍然只读取第一行。我如何让它也读取其他行,以便它可以达到#1?解决了定界符问题太棒了…你的解释有一段时间了…+1!!:)我认为定界符也有问题,它应该是“#”而不是“#1”,因为“#1”如果(line.startsWith(“#1”)有意义,谢谢。但是,它仍然只读取第一行。我如何使它也读取其他行,以便它可以达到#1?解决定界符问题?谢谢!我必须将字符串拆分为数组才能返回结果吗“300”值,或者有其他更好的方法吗?如果您的行仅以#开头并遵循相同的格式,您可以在“300”文本出现的索引处取子字符串。但是,因为看起来行可以以“#1”到#1000”之间的任何内容开头或者更重要的是,最好使用split方法。感谢您的解释,现在我更清楚了。谢谢!我必须将字符串拆分为数组以返回“300”值吗?还是有其他更好的方法?如果您的行仅以#开头并遵循相同的格式,您可以在索引中的“300”处取子字符串文本出现了。但是因为看起来行可以从“#1”到#1000”或更多开始,所以最好使用拆分方法。感谢您的解释,现在我更清楚了。