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

标签 java buffer readline

所以我是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);
    }
}

最佳答案

您的 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

关于java - 以不区分大小写的顺序输出文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044023/

相关文章:

Javascript:移动二维数组

python - 如何从同一行的 txt 文件中读取两个变量?在 python

java - 如何使用带参数的随机类?

java - 在 Eclipse E4 中始终显示零件堆栈

java - Hibernate 5二级缓存不工作,仍然从数据库获取

java - 用于内存字节数组的 RandomAccessFile-like API?

c++ - OpenGL 缓冲区问题

Qt MediaPlayer 从内存中播放音频

node.js - 如何查看nodejs中readline模块的源代码?

c - 在 ansi c 中用 pascal 替换 readln 有什么很酷的功能吗?