如何从文本文件返回特定行?

时间:2019-07-18 14:38:47

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

在“ 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:

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以定义新的变量字符串结果,并在达到所需条件时将行存储在其中,然后输出该变量。但是循环将继续执行并且效率不高。

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;
                }

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