【问题标题】:Java deleting blank line in an txt fileJava删除文本文件中的空行
【发布时间】:2014-04-18 03:33:44
【问题描述】:

我从一个可以正常工作的文本文件中删除了一些行,但我遇到了空行问题。 那些仍然在 .txt 文件中,我不知道如何删除或放置那些我在谷歌和这里搜索了解决方案,但我失败了。 有人知道如何删除空行吗? 我试过了:

 currentLine.trim().length() == 0 ); but still with out success

坦克

    public static String COMMENT_LINE = "--.*";
    public static String CREATE_BUFFERPOOL = "CREATE BUFFERPOOL.*";
    public static String GRANT_USE = "GRANT USE.*";
    public static String CONNECT_TO = "CONNECT TO.*";
    public static Logger log = Logger.getLogger(Main.class);



    //CHANGE PATH
    public static String INPUT_FILE_PATH = "C://Users//dpa//Desktop//BW//bwcsvtest.txt";
    public static String OUTPUT_FILE_PATH "C://Users//dpa//Desktop//BW//BWFormated.txt";
    public static String TRANSFORM_FILE_PATH = "C://Users//dpa//Desktop//BW//BWtransformed.txt";
    public static String CSV_FILE_PATH = "C://Users//dpa//Desktop//BW//result.csv";

    public static void main(String[] args) throws IOException {
        //log.debug("Formating File");
        formatTxt(INPUT_FILE_PATH,OUTPUT_FILE_PATH);
        log.debug("Formating File complete");
        //CsvTransformer csvTransformer = new CsvTransformer(OUTPUT_FILE_PATH,TRANSFORM_FILE_PATH);
        //csvTransformer.parseCSVInput();
        //csvTransformer.writeDataToCsv(CSV_FILE_PATH);

    }

    public static void formatTxt(String inputFilePath, String outputFilePath) throws IOException {
        File inputFile = new File(inputFilePath);
        BufferedReader reader = new BufferedReader(new FileReader(inputFile));

        File tempFile = new File(outputFilePath);
        BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
        String currentLine;
        while ((currentLine = reader.readLine()) != null) {
            currentLine = currentLine.trim();
            if (currentLine.matches(COMMENT_LINE)) {
                log.debug(currentLine);
                log.debug("Commentline deleted");
                continue;
            }
            if (currentLine.matches(CREATE_BUFFERPOOL)) {
                log.debug(currentLine);
                log.debug("CREATE BUFFERPOOL deleted");
                continue;
            }
            if (currentLine.matches(GRANT_USE)) {
                log.debug(currentLine);
                log.debug("GRANT USE deleted");
                continue;
            }
            if (currentLine.matches(CONNECT_TO)) {
                log.debug(currentLine);
                log.debug("CONNECT TO deleted");
                continue;           
            }

            writer.write(currentLine.replace("\t", ""));
            writer.newLine();

        }
        reader.close();
        writer.close();


    }

}

【问题讨论】:

  • 首先,我建议在您的formatTxt 方法中使用if/else if。由于它是编码的,它每次都会低效地重新测试相同的字符串,一旦它确定了它是哪一行,它就不应该这样做。其次,我看不到您要删除该行的位置。我希望您的 formatTxt 中有一个 if 来测试该行是否为空白,以便与其他 if 块一样不做任何事情。
  • @CodeChimp "as it's coded" --> 每个if 块的末尾都有一个continue;,所以不,它不会重新测试
  • 没错,现在还早,我通常不使用continue,所以它没有注册。但是,我仍然希望看到一些针对空字符串的测试。
  • 注意:可以优化代码...您可以创建Pattern 实例,而不是在字符串上使用.matches()String.matches() 每次都会重新创建一个 Pattern...

标签: java replace text-files removing-whitespace blank-line


【解决方案1】:

为什么不在currentLine = currentLine.trim();后面加上这段代码:

if (currentLine.isEmpty())
    continue;

【讨论】:

    【解决方案2】:
    currentLine = currentLine.trim();
    if (!currentLine .equals("")) // don't write out blank lines
        {
            writer.write(currentLine , 0, currentLine .length());
        }
    

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多