如何从文本文件中删除空行? Java的

时间:2017-10-04 16:34:18

标签: java

我有一个文本文件,我想在其中读取,删除所有非字母字符和空白行,包括空行。然后将文本转换为小写。到目前为止,这就是代码:

public static String replace(String file ){
    String plaintext = "";

    try{
        Scanner input = new Scanner(new File(file));
        while(input.hasNext()){
             //text = text + input.nextLine();
             plaintext = input.nextLine();
             plaintext = plaintext.replaceAll("[^a-zA-Z]", "");
             plaintext = plaintext.toLowerCase();
             System.out.println(plaintext);
        }
        input.close();
    }
    catch(FileNotFoundException e){
        System.out.println("File not found. ");
    }
    return "";
}//end of replace method

我面临的唯一问题是我不知道如何删除文本文件的每个段落之间的黑色空格行。我的输出显示如下:

  

csthesciencethatdealswiththetheoryandmethodsofprocessinginformationindigitalcomputersthedesignofcomputerhardwareandsoftwareandthe   applicationsofcomputers

     

itthedevelopmentimplementationandmaintenanceof   computerhardwareandsoftwaresystemstoorganizeandcommunicateinformation   electronicallyabbreviationit

     

computersaremanmadetoolsthataidusinsolvingotherproblemsabiologististryingtofigureouthowlifeworksphysicistsandchemistsaretryingtofigureouthowitemsreactinouruniversemathematiciansaretryingtofigureoutrulesformanmadesystems

     

anyresearchproblemthatmayimproveacomputerscapabilityofhelpingsolveaproblemoranyresearchproblemthatshedslightaboutanewwaytodosomethingwithacomputerispartofcs

     

mostexcitingresearchmedicalapplicationsexpertsystemsfordiagnosis

1 个答案:

答案 0 :(得分:0)

以下代码应该有效;请注意,就文件处理而言,它使用JSR 203 API(因为Java 7;存储10年以上供您使用),Java 8用于流及其相关方法。另请注意,它不能使用BMP之外的代码点:

public static String trimFile(final String file)
    throws IOException
{
    final StringBuilder sb = new StringBuilder();
    final Path path = Paths.get(file);

    try (
        final Reader r = Files.newBufferedReader(path);
    ) {
        int c;
        while ((c = r.read()) != -1)
            if (Character.isLetter(c))
                sb.appendCodePoint(c);
    }

    return sb.toString();
}

这里有一点解释:

  • 除了符合要求的Reader之外,我们不需要任何其他内容;即使Files.newBufferedReader()返回BufferedReader,我们也不在乎逐行阅读,因此我们将其降级为Reader,我们相信JRE的实施可以事;
  • read()的{​​{1}}方法返回一个int ...根据要求,这很好(即,我们不应该期望BMP之外的代码点);
  • 使用的Reader实现是以Character.isLetter()作为参数的实现,那么,正如前面所述,我们不希望BMP之外的代码点,在这种情况下,此方法的行为与对应的int相同,因此不会造成任何伤害;
  • 但是,我们必须使用char的{​​{1}};这堂课'将int作为参数的appendCodePoint方法将整数的字符串表示作为参数附加,但这不是我们想要的。