java - 如何按字符串中的电话簿字母顺序排列

标签 java

我有我的电话簿程序,但当用户输入“l”作为条目列表时,我试图让条目自动按字母顺序排列。我不知道该怎么做。我尝试将其放入列表中并以这种方式对其进行排序,但它只需要条目的名字。

import java.io.*;
import java.util.*;
class Entry {
    public String fname, number, note, lname;
}
public class Main {
    public static Entry[] contactList;
    public static int num_entries;
    public static Scanner stdin = new Scanner(System.in);
    public static void main(String args[]) throws Exception{
        int i; char C;
        String code, Command;
        contactList = new Entry[200];
        num_entries = 0;
        readPhoneBook("PhoneBook.txt");
        System.out.println("Please Enter A Command.\nUse" +
                " \"e\" for enter," +
                " \"f\" for find," +
                " \"l\" for listing all the entries," +
                " \"m\" to merge duplicate entries," +
                " \"d\" to delete an entry," +
                " \"q\" to quit.");
        Command = null;
        C = ' ';
        while(C != 'q'){
            System.out.print("Command: ");
            Command = stdin.next();
            C = Command.charAt(0);
            switch (C) {
                case 'e': addContact(); break;
                case 'f':
                    code = stdin.next();
                    stdin.nextLine();
                    i = index(code);
                    if (i >= 0) displayContact(contactList[i]);
                    else System.out.println("**No entry with code " + code); break;
                case 'l':
                    listAllContacts(); break;
                case 'q':
                    CopyPhoneBookToFile("PhoneBook1.txt");
                    System.out.println("Quitting the application. All the entries are "
                            + "stored in the file PhoneBook1.txt"); break;
                case 'm':

                    break;
                case 'd':

                    break;
                default:
                    System.out.println("Invalid command Please enter the command again");
            }
        }
    }
    public static void readPhoneBook(String FileName) throws Exception {
        File F;
        F = new File(FileName);
        Scanner S = new Scanner(F);
        while (S.hasNextLine()) {
            contactList[num_entries]= new Entry();
            contactList[num_entries].fname = S.next();
            contactList[num_entries].lname = S.next();
            contactList[num_entries].number = S.next();
            contactList[num_entries].note = S.nextLine();
            num_entries++;
        }
        S.close();
    }
    public static void addContact() {
        System.out.print("Enter First Name: ");
        String fname = stdin.next(); //First Name
        stdin.nextLine();
        System.out.print("Enter Last Name: ");
        String lname = stdin.next(); //Last Name
        String number;
        stdin.nextLine();
        contactList[num_entries] = new Entry();
        contactList[num_entries].fname = fname; //Saves first name as fname
        contactList[num_entries].lname = lname; //Saves last name as lname
        System.out.print("Enter Number: ");
        number = stdin.nextLine();
        contactList[num_entries].number = number; //Saves phone number as number
        System.out.print("Enter Notes: ");
        contactList[num_entries].note = stdin.nextLine(); //saves any notes
        num_entries++;
    }
    public static int index(String Key) {
// Function to get the index of a key from an array
// if not found, returns -1
        for (int i=0; i < num_entries; i++) {
            if (contactList[i].fname.equalsIgnoreCase(Key))
                return i; // Found the Key, return index.
        }
        return -1;
    }
    public static void displayContact(Entry contact) {
        System.out.println("--"+ contact.fname+"\t"+
                contact.lname+"\t"+
                contact.number+"\t"+
                contact.note);
    }
    public static void listAllContacts() {
        int i = 0;
        while (i < num_entries) {
            displayContact(contactList[i]);
            i++;
        }
    }
    public static void CopyPhoneBookToFile(String FileName) throws Exception{
        FileOutputStream out = new FileOutputStream(FileName);
        PrintStream P = new PrintStream( out );
        for (int i=0; i < num_entries; i++) {
            P.println(contactList[i].fname + "\t" + contactList[i].lname + "\t" + contactList[i].number +
                    "\t" + contactList[i].note);
        }
    }}

这是输入新联系人的位

public static void addContact() {
        System.out.print("Enter First Name: ");
        String fname = stdin.next(); //First Name
        stdin.nextLine();
        System.out.print("Enter Last Name: ");
        String lname = stdin.next(); //Last Name
        String number;
        stdin.nextLine();
        contactList[num_entries] = new Entry();
        contactList[num_entries].fname = fname; //Saves first name as fname
        contactList[num_entries].lname = lname; //Saves last name as lname
        System.out.print("Enter Number: ");
        number = stdin.nextLine();
        contactList[num_entries].number = number; //Saves phone number as number
        System.out.print("Enter Notes: ");
        contactList[num_entries].note = stdin.nextLine(); //saves any notes
        num_entries++;
    }

最佳答案

我会在您的 Entry 类中创建一个compareTo 方法,并将其设置为比较您想要的方式。最重要的部分是如何存储条目。如果您使用排序数组,则可以在将所有内容输入到数组中时对其进行排序,并在想要将其读出时线性地遍历

关于java - 如何按字符串中的电话簿字母顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55926990/

相关文章:

java - Neo4j 导出和导入数据

java - 抽象方法

java - 如何检索已存储在 firebase 数据库中并在回收器 View 中显示的图像?

java - 如何使用java从xml中读取一些点

java - 尝试使用按钮更改 JTextFields

java - JAXB 在 XML 中添加不需要的标签并删除所需的标签

Java 反射 Bean 属性 API

java - 从另一个apk获取资源

java - 在Java代码中,我创建的方法仅将第一个重复实例放入新数组中

Java创建可执行命令行程序(windows)