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