【问题标题】:How to discard lines in text file until certain string is found如何丢弃文本文件中的行,直到找到某个字符串
【发布时间】:2013-05-20 19:29:13
【问题描述】:

该文件以大约 200 行我不需要的背景信息开头。我试图跳过/忽略这 200 行,直到找到一个字符串。找到此字符串后,我希望能够继续处理文本文件的其余部分。

示例文本文件: (直到第 240 行是我需要跳过/忽略的所有行) http://pastebin.com/5Ay4ad6y

public static void main(String args[]) {
    String endOfSyllabus = "~ End of Syllabus";
    Path objPath = Paths.get("2014HamTechnician.txt");

    if (Files.exists(objPath)) {
        File objFile = objPath.toFile();
        try (BufferedReader in = new BufferedReader(new FileReader(objFile))) {
            String line = in.readLine();

            while (line != null) {
                line = in.readLine();
            }

            if(endOfSyllabus.equals(line) ){

           restOfTextFile = line.split(endOfSyllabus);
         }

         }

        System.out.println(restOfTextFile[0]);




        }
    catch(IOException e){
          System.out.println(e);
    }

    }
    else{

        System.out.println(
              objPath.toAbsolutePath() + " doesn't exist");
    }



    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new A19015_Form().setVisible(true);
        }
    });
}

【问题讨论】:

  • 您当前的代码有什么问题?
  • if(line == endOfSyllabus ){这一行:不要在Java中使用==来比较String的值;请改用String#equals
  • 当您到达文件末尾时,while 循环将无法正常工作。
  • 我想问题是我如何能够丢弃所有这些行,以便我可以继续从文本文件中提取数据。我希望能够遍历处理每一行的文本文件,但首先我想丢弃~ End of Syllabus 字符串之前的所有行。

标签: java text-files readline


【解决方案1】:

如果你知道你正在寻找的确切字符串,你可以试试这个

if (lineString.startsWith("insert exact string")) {
    // ...
}

【讨论】:

    【解决方案2】:

    怎么样:

    boolean found = false;
    for (String line; (line = in.readLine()) != null;) {
        found = found || line.equals(endOfSyllabus); 
        if (found) {
             // process line
        }
    }
    

    【讨论】:

      【解决方案3】:
      import java.io.File;
      import java.io.IOException;
      import java.util.ArrayList;
      import java.util.List;
      
      import org.apache.commons.io.FileUtils;
      
      public class Test {
      
          /**
           * @param args
           * @throws IOException
           */
          public static void main(String[] args) throws IOException {
              List<String> lines = FileUtils.readLines(new File("test.txt"));
              List<String> avLines = new ArrayList<>();
              boolean valid = false;
              for (String line : lines) {
      
                  if (line.trim().equals("~ End of Syllabus")) {
                      valid = true;
                      continue;
                  }
                  if (valid) {
                      avLines.add("\n"+line);
                  }
              }
              System.out.println(avLines.size());
      
          }
      
      }
      

      【讨论】:

      • 我试过这个:pastebin.com/4rDpLfrM。我现在越界了,它不显示文本文件的其余部分。
      • 你试过我显示的代码了吗?你能告诉我你到底想做什么吗?
      • 我不明白如何从文本文件中提取特定数据。我必须这样做的方式有点复杂。例如,我想做一个测试生成器。问题和答案在文本文件 (pastebin.com/5Ay4ad6y) 中。我想解析文本文件并为每个问题创建一个数据库记录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2017-04-27
      • 1970-01-01
      相关资源
      最近更新 更多