为了账号安全,请及时绑定邮箱和手机立即绑定

在文件中查找特定号码

在文件中查找特定号码

BIG阳 2021-10-17 15:40:31
您好,我正在尝试在 java 中循环一个文件,并仅输出其中年份为 2000 的字符串。出于某种原因,当我这样做.trim().compare(year)时仍然返回所有字符串。我不知道为什么文件中的字符串示例是20/04/1999-30300913/04/2000-279906/10/1999-123例如,在这 3 个中,我只想获取13/04/2000-2799 (注意文件很大)这是我到目前为止想出的代码:public static void main(String[] args) throws IOException {    //Initiating variables    String filedir =("c://test.txt");    ArrayList<String> list = new ArrayList<String>();    String year = "2000";    try (Scanner scanner = new Scanner(new File(filedir))) {        while (scanner.hasNextLine()){            //  String[] parts = scanner.next().split("-");            if (scanner.nextLine().trim().contains(year)) {                System.out.println(scanner.nextLine());            }         }    } catch (IOException e) {        e.printStackTrace();    }}
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您代码中的问题出在 while 块中:


    while(scanner.hasNextLine()){              

          //This first call returns 13/04/2000-2799

          if(scanner.nextLine().trim().contains(year)){//This line finds matching value

                //But this line prints the next line                                      

                System.out.println(scanner.nextLine());//this call returns 06/10/1999-123

          }

    }

您可以做的是将您需要的值存储在一个变量中,如果它与年份匹配,则打印它:


    while(scanner.hasNextLine()){

          //You store the value

          String value = scanner.nextLine().trim();

          //See if it matches the year

          if(value.contains(year)){

                //Print it in case it matches

                System.out.println(value);

          }

    }

希望这可以帮助。


查看完整回答
反对 回复 2021-10-17
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您使用了 scanr.nextLine() 两次。那是一个错误。每次迭代仅调用一次并将结果分配给 String 值以供使用。


查看完整回答
反对 回复 2021-10-17
?
慕斯王

TA贡献1864条经验 获得超2个赞

您调用了scanner.nextLine()两次,这意味着一旦找到匹配的行,您实际上是在打印下一行。


查看完整回答
反对 回复 2021-10-17
  • 3 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信