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”或更多开始,所以最好使用拆分方法。感谢您的解释,现在我更清楚了。