java - 以不区分大小写的顺序输出文本

java - output text in case in-sensitive order

所以我是 java 的新手,目前正在学习如何阅读文本文件。我正在尝试构建一个程序,一次从用户那里读取一行输入,当我按下 ctrl + z 时,它应该以不区分大小写的排序顺序输出所有行。我对如何使用集合有点困惑,我尝试按照我在网上找到的类似示例进行操作。但是,当我 运行 我的程序时,它只输出我输入的任何内容而没有对任何内容进行排序。我做错了什么?

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
    List<String> listStrings = new ArrayList<>();
    String line;
    while((line = r.readLine()) != null) {
        listStrings.add(line);
    }

    Collections.sort(listStrings);

    Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);

    Collections.sort(listStrings, Collections.reverseOrder());

    Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);

//  Collections.reverse(listStrings);

    for (String text: listStrings) {
        w.println(text);
    }
}

None 次 Collections._____() 调用将打印任何内容。它们只是对底层集合 (listStrings) 进行操作。所以,这就是你期望在每一步之后得到的结果:

//listStrings
Collections.sort(listStrings);
//listStrings sorted alphabetically, case sensitive
Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);
//listStrings sorted alphabetically, case insensitive
Collections.sort(listStrings, Collections.reverseOrder());
//listStrings sorted alphabetically in reverse order, case insensitive
Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER);
//listStrings sorted alphabetically, case insensitive
Collections.reverse(listStrings);
//listStrings sorted alphabetically in reverse order, case insensitive

最后,在对 listStrings 进行所有这些更改后,您尝试打印该集合。你 运行 到这里的问题是你实际上并没有刷新输出流,这可能是缓冲的。因此,不会打印任何内容。我已经重写了您的代码以对 listStrings 产生完全相同的效果,并打印输出,如下所示:

public static void doIt(BufferedReader r, PrintWriter w) throws IOException
{
    List<String> listStrings = new ArrayList<>();
    String line;
    while((line = r.readLine()) != null)
    {
        listStrings.add(line);
    }

    Collections.sort(listStrings, String.CASE_INSENSITIVE_ORDER.reversed());

    for(String text : listStrings)
    {
        w.println(text);
    }
    w.flush();
}

我从我的主要方法中这样调用它:

public static void main(String[] args) throws Exception
{
    doIt(new BufferedReader(new InputStreamReader(System.in)), new PrintWriter(System.out));
}

这是最终效果:
输入:

ABCD
bcde
fegh
ijkl

输出:

ijkl
fegh
bcde
ABCD