Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:如何按字母顺序对从文件读取并输出到控制台的字符串进行排序?_Java_Addressbook_Contact - Fatal编程技术网

JAVA:如何按字母顺序对从文件读取并输出到控制台的字符串进行排序?

JAVA:如何按字母顺序对从文件读取并输出到控制台的字符串进行排序?,java,addressbook,contact,Java,Addressbook,Contact,我想按姓氏的字母顺序将从文件中读取的联系人排序到控制台?我该怎么做呢?联系人已写入以姓氏开头的文件,我只想在用户希望在控制台中查看联系人时,按字母顺序将其读回应用程序 // Read from file, print to console. by XXXXX // ---------------------------------------------------------- int counter = 0; Strin

我想按姓氏的字母顺序将从文件中读取的联系人排序到控制台?我该怎么做呢?联系人已写入以姓氏开头的文件,我只想在用户希望在控制台中查看联系人时,按字母顺序将其读回应用程序

// Read from file, print to console. by XXXXX
            // ----------------------------------------------------------
            int counter = 0;
            String line = null;

            // Location of file to read
            File file = new File("contactlist.csv");

            try {

                Scanner scanner = new Scanner(file);

                while (scanner.hasNextLine()) {
                    line = scanner.nextLine();
                    System.out.println(line);
                    counter++;
                }
                scanner.close();
            } catch (FileNotFoundException e) {

            }
            System.out.println("\n" + counter + " contacts in records.");

        }
        break;
        // ----------------------------------------------------------
        // End read file to console. by XXXX

打印前,将每一行添加到已排序集,如下所示:

设置行=新树集();
while(scanner.hasNextLine()){
line=scanner.nextLine();
行。添加(行);
计数器++;
}
for(字符串文件行:行){
System.out.println(文件行);
}

打印前,将每行添加到已排序的集合中,作为:

设置行=新树集();
while(scanner.hasNextLine()){
line=scanner.nextLine();
行。添加(行);
计数器++;
}
for(字符串文件行:行){
System.out.println(文件行);
}

从文件中读取名称,将其放入类别SortedSet的对象中。

从文件中读取名称,将其放入类别SortedSet的对象中。

包main.java.com.example;
package main.java.com.example;

import java.io.*;
import java.net.URL;
import java.util.Set;
import java.util.TreeSet;

public class ReadFromCSV {
    public static void main(String[] args) {
        try {
            final ClassLoader loader = ReadFromCSV.class.getClassLoader();
            URL url = loader.getResource("csv/contacts.csv");
            if (null != url) {
                File f = new File(url.getPath());
                BufferedReader br = new BufferedReader(new FileReader(f));
                Set<String> set = new TreeSet<String>();
                String str;

                while ((str = br.readLine()) != null) {
                    set.add(str);
                }

                for (String key : set) {
                    System.out.println(key);
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
导入java.io.*; 导入java.net.URL; 导入java.util.Set; 导入java.util.TreeSet; 公共类ReadFromCSV{ 公共静态void main(字符串[]args){ 试一试{ final ClassLoader=ReadFromCSV.class.getClassLoader(); URL=loader.getResource(“csv/contacts.csv”); 如果(null!=url){ 文件f=新文件(url.getPath()); BufferedReader br=新的BufferedReader(新文件读取器(f)); Set=新树集(); 字符串str; 而((str=br.readLine())!=null){ set.add(str); } for(字符串键:设置){ 系统输出打印项次(键); } } }catch(filenotfounde异常){ e、 printStackTrace(); }捕获(IOE异常){ e、 printStackTrace(); } } }
package main.java.com.example;
导入java.io.*;
导入java.net.URL;
导入java.util.Set;
导入java.util.TreeSet;
公共类ReadFromCSV{
公共静态void main(字符串[]args){
试一试{
final ClassLoader=ReadFromCSV.class.getClassLoader();
URL=loader.getResource(“csv/contacts.csv”);
如果(null!=url){
文件f=新文件(url.getPath());
BufferedReader br=新的BufferedReader(新文件读取器(f));
Set=新树集();
字符串str;
而((str=br.readLine())!=null){
set.add(str);
}
for(字符串键:设置){
系统输出打印项次(键);
}
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

扫描文件时,将每一行(可能解析为对象)添加到列表中,对列表进行排序,然后打印出来。文件有多大?可以将所有内容加载到内存中吗?文件非常小。它就像一个200kb的文件。但是,如果用户可以向该文件添加更多信息,那么它可能会成为一个大文件。在扫描该文件时,将每一行(可能解析为一个对象)添加到列表中,并对列表进行排序,然后打印出来。该文件有多大?可以将所有内容加载到内存中吗?文件非常小。它就像一个200kb的文件。但是,如果用户可以向该文件添加更多信息,则该文件可能会成为一个大文件。请尝试此操作。然而,它说我有一个“重复的局部变量行”,并且不会运行。如果我重命名字符串,我会得到一个不按字母顺序排列的正常输出。@user2149907:该集合的名称为“lines”,而字符串的名称为“line”。您没有输入错误吗?“String line=null;”正在导致重复。@user2149907:我在for循环中输入了字符串的名称,该名称与上一个变量的名称相同。效果非常好。然而,他们是否只是一个简单的调整来忽略这个案例?比如,亚当斯,亚当斯?它将在小写字母前打印棕色。但是,将在Brown之前打印大写的Adams。但是,再一次。非常感谢。效果很好,试过了。然而,它说我有一个“重复的局部变量行”,并且不会运行。如果我重命名字符串,我会得到一个不按字母顺序排列的正常输出。@user2149907:该集合的名称为“lines”,而字符串的名称为“line”。您没有输入错误吗?“String line=null;”正在导致重复。@user2149907:我在for循环中输入了字符串的名称,该名称与上一个变量的名称相同。效果非常好。然而,他们是否只是一个简单的调整来忽略这个案例?比如,亚当斯,亚当斯?它将在小写字母前打印棕色。但是,将在Brown之前打印大写的Adams。但是,再一次。非常感谢。效果很好。
package main.java.com.example;

import java.io.*;
import java.net.URL;
import java.util.Set;
import java.util.TreeSet;

public class ReadFromCSV {
    public static void main(String[] args) {
        try {
            final ClassLoader loader = ReadFromCSV.class.getClassLoader();
            URL url = loader.getResource("csv/contacts.csv");
            if (null != url) {
                File f = new File(url.getPath());
                BufferedReader br = new BufferedReader(new FileReader(f));
                Set<String> set = new TreeSet<String>();
                String str;

                while ((str = br.readLine()) != null) {
                    set.add(str);
                }

                for (String key : set) {
                    System.out.println(key);
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}