Java 从txt文件中删除空行

Java 从txt文件中删除空行,java,Java,我设法使这段代码正常工作。它读取test.txt,大约有10000个单词(每个单词在自己的行中),并首先按字母顺序格式化,其次按长度格式化。然而,当我打开sort.txt时,我首先得到了很多空行,然后这些单词被正确格式化。我的问题是如何删除这些空行,因为它们不可能在那里。威尔,修好了吗 package test; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import

我设法使这段代码正常工作。它读取test.txt,大约有10000个单词(每个单词在自己的行中),并首先按字母顺序格式化,其次按长度格式化。然而,当我打开sort.txt时,我首先得到了很多空行,然后这些单词被正确格式化。我的问题是如何删除这些空行,因为它们不可能在那里。威尔,修好了吗

package test;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class sort {
public static class MyComparator implements Comparator<String>{
    @Override
    public int compare(String o1, String o2) {  
      if (o1.length() > o2.length()) {
         return 1;
      } else if (o1.length() < o2.length()) {
         return -1;
      }
      return o1.compareTo(o2);
    }
}
public static void main(String[] args) throws Exception {

    String inputFile = "test.txt";
    String outputFile = "sort.txt";

    FileReader fileReader = new FileReader(inputFile);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String inputLine;
    List<String> lineList = new ArrayList<String>();
    while ((inputLine = bufferedReader.readLine()) != null) {
        lineList.add(inputLine);
    }
    fileReader.close();

    Collections.sort(lineList,String.CASE_INSENSITIVE_ORDER);

    FileWriter fileWriter = new FileWriter(outputFile);
    PrintWriter out = new PrintWriter(fileWriter);
    for (String outputLine : lineList) {
        out.println(outputLine);
    }   

    Collections.sort(lineList, new MyComparator());

    FileWriter Fw = new FileWriter(outputFile);
    PrintWriter pw = new PrintWriter(fileWriter);
    for (String outputLine : lineList) {
        out.println(outputLine);
    }       
    out.flush();
    out.close();
    fileWriter.close();

}
}
封装测试;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类排序{
公共静态类MyComparator实现了Comparator{
@凌驾
公共整数比较(字符串o1,字符串o2){
如果(o1.length()>o2.length()){
返回1;
}else if(o1.length()
不要添加那些空行:

while ((inputLine = bufferedReader.readLine()) != null) {
    if (!inputLine.isEmpty()) {
        lineList.add(inputLine);
    }
}
你所需要的只是

for (String outputLine : lineList) {
    if (!"".equals(outputLine.trim()))
        out.println(outputLine);
    //...

您不能单独使用
.trim()
来解决这个问题,因为它只是在开头和结尾去掉了空格。它将保留一个空的
字符串
不变。我在这里使用它来确保您也省略了不是空的但只有空格的行。

当您实际向列表中添加字符串时,您可以处理它,这将是一种很好的方法,如

while (!StringUtils.isEmpty(inputLine = bufferedReader.readLine())) {

设法使它起作用。这是解决办法。谢谢你的回复

package test;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class sort {
public static class MyComparator implements Comparator<String>{
    @Override
    public int compare(String o1, String o2) {  
      if (o1.trim().length() > o2.trim().length()) {
         return 1;
      } else if (o1.trim().length() < o2.trim().length()) {
         return -1;
      }
      return o1.compareTo(o2);
    }
}
public static void main(String[] args) throws Exception {

    String inputFile = "test.txt";
    String outputFile = "sort.txt";

    FileReader fileReader = new FileReader(inputFile);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String inputLine;
    List<String> lineList = new ArrayList<String>();
    while ((inputLine = bufferedReader.readLine()) != null) {
        lineList.add(inputLine);
    }

    Collections.sort(lineList,String.CASE_INSENSITIVE_ORDER);
    Collections.sort(lineList, new MyComparator()); 

    FileWriter fileWriter = new FileWriter(outputFile);
    PrintWriter out = new PrintWriter(fileWriter);
    FileWriter Fw = new FileWriter(outputFile);
    PrintWriter pw = new PrintWriter(Fw);
    for (String outputLine : lineList) {
        if (!"".equals(outputLine.trim()))
            out.println(outputLine);        }       
    out.flush();
    out.close();
    fileWriter.close();

}
}
封装测试;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类排序{
公共静态类MyComparator实现了Comparator{
@凌驾
公共整数比较(字符串o1,字符串o2){
如果(o1.trim().length()>o2.trim().length()){
返回1;
}否则如果(o1.trim().length()
String
还有
.isEmpty()
只有两个小点:在close()之前不需要调用flush()。您也不需要关闭fileWriter,因为当您关闭printWriter时,它将被关闭。多亏了编程方面的新知识,这个问题似乎在应用程序比较中,而不是length@RokIvartnik你在两个地方输出,所以你需要它两次。但是Terry建议在输入时做同样的事情可能会更好。你确定你的代码按预期工作吗?根据您的
MyComparator
中的修剪,我相信您也处理前导/尾随空格。创建一个test.txt,包含以下6行(点应替换为空白)
.aa
.bbb
aaa
cc.
cc..
ddd
。您好,我知道我是否在一个单词的开头或后面留有空格,但它没有用。这对我来说并不重要,因为我没有处理这件事。但是,如果您知道如何解决此问题,请回复,以便我可以了解更多。如果行没有前导/尾随空白字符。然后你可以根据长度排序。也许你最好编辑你的问题,并提供一个输入(可以是genrice输入,没有真实数据)和预期输出的示例。为了更好地理解您想要解决的问题。