【问题标题】:How to return specific line from text file?如何从文本文件中返回特定行?
【发布时间】:2019-07-18 14:38:47
【问题描述】:

在“while”条件内,它显示正确的行,但是当我尝试在“while”之外显示同一行时,它会显示我的文本文件的最后一行。

public String path() throws FileNotFoundException { 

     Scanner s = null;
        String str;
    try {
      s = new Scanner(new BufferedReader(new 
    FileReader("src/main/resources/linda.txt")));
            do{
                str=s.next();
                if((s.hasNext(("get:"))||s.hasNext(("post:")) || s.hasNext(("put:")) || s.hasNext(("delete:"))))
                {
                    System.out.println(str);
                }
            }while(s.hasNext());
        }
        finally{
            if (s != null) {
        }

}               System.out.println(str);

            return str;

}

我希望这段代码的输出是
欺诈检查/ :fraudcheck/:,但实际输出是欺诈检查/: foo:

这是我的文本文件

openapi: "3.0.0"
     info:
        title: Simple API overview
           version: 2.0.0
            paths:
             fraudcheck/:
           get:
           operationId: listVersionsv2
    summary: List API versions
  responses:
    '200':
      description: |-
        200 response
      content:
        application/json:
          examples: 
            foo:

【问题讨论】:

  • 一定要用Java吗?其他工具更适合这项任务
  • 添加break; 找到给定行后,它将退出while 循环..
  • 您的循环一直运行到文件末尾。它一直在str 中存储行,只是不打印它们。如果只有一个匹配,您可以在匹配后直接从循环中返回。
  • 谢谢阿诺!它现在可以在休息时使用;

标签: java file-io java.util.scanner


【解决方案1】:

你可以定义一个新的变量String result,当达到理想的条件时将你的行存入其中,然后输出这个变量。但是循环的执行会继续执行,效率不高。

String result;
........
 if((s.hasNext(("get:"))||s.hasNext(("post:")) || s.hasNext(("put:")) || s.hasNext(("delete:"))))
                {
                    result = str;
                    System.out.println(str);
                }

.......
 System.out.println(result);

因此,如果您只需要一行,则将 break 放在这样的条件块末尾会更有效

if((s.hasNext(("get:"))||s.hasNext(("post:")) || s.hasNext(("put:")) || s.hasNext(("delete:"))))
                {
                    System.out.println(str);
                     break;
                }

在这种情况下,当条件为真时循环停止并且变量 str 将具有所需行的值。

【讨论】:

  • 其实我需要多读几行,你的回答很有帮助
  • 在这种情况下你能证明吗?
  • 是的,你的回答很详细
【解决方案2】:

do-while 循环一直运行到文件末尾。

遇到匹配行后,使用break 退出循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2014-04-30
    • 2021-03-24
    相关资源
    最近更新 更多