如何将文本文件存入ArrayList并在类方法中实现姓名查询
嘿,我来帮你搞定这个联系人查询功能!其实核心逻辑很简单,就是遍历你已经加载好的ArrayList<Person>,匹配用户输入的姓名就行。我给你整理了完整的实现步骤和代码示例:
第一步:确保你的Person类具备必要的方法
首先,Person类需要有获取姓名的getter方法,以及方便打印信息的toString方法,不然你没法在查询时匹配姓名,也没法快速输出联系人信息。示例如下:
public class Person { private String name; private String phoneNumber; // 可以根据需求添加其他属性,比如邮箱、地址等 public Person(String name, String phoneNumber) { this.name = name; this.phoneNumber = phoneNumber; } // 获取姓名的getter,用于查询匹配 public String getName() { return name; } // 重写toString,方便直接打印联系人信息 @Override public String toString() { return "姓名: " + name + ", 电话号码: " + phoneNumber; } }
第二步:完善Directory类的实现
你已经把phone.txt加载到persons集合里了,接下来只需要在optionP方法里实现查询逻辑就行。我把完整的Directory类代码写出来,包括文件加载(假设你之前的加载逻辑类似)和查询功能:
import java.util.*; import java.io.*; public class Directory { Scanner kbd = new Scanner(System.in); ArrayList<Person> persons; // 构造方法:初始化集合并加载文件 public Directory() { persons = new ArrayList<>(); loadPhoneFile(); } // 加载phone.txt到集合的方法(你可以替换成你自己的加载逻辑) private void loadPhoneFile() { try (BufferedReader reader = new BufferedReader(new FileReader("phone.txt"))) { String line; // 假设文件每行格式是"姓名,电话号码",根据你的实际格式调整分割规则 while ((line = reader.readLine()) != null) { String[] info = line.split(","); if (info.length >= 2) { String name = info[0].trim(); String phone = info[1].trim(); persons.add(new Person(name, phone)); } } } catch (IOException e) { System.out.println("加载联系人文件失败: " + e.getMessage()); } } // 你需要实现的optionP查询方法 public void optionP() { System.out.print("请输入要查询的姓名: "); String searchName = kbd.nextLine().trim(); boolean isFound = false; // 遍历集合查找匹配的联系人 for (Person p : persons) { // 用equalsIgnoreCase忽略大小写,提升用户体验;如果需要严格匹配,换成equals() if (p.getName().equalsIgnoreCase(searchName)) { System.out.println("找到联系人信息:"); System.out.println(p); isFound = true; // 如果允许显示多个同名联系人,删掉下面的break即可 // break; } } if (!isFound) { System.out.println("未找到姓名为'" + searchName + "'的联系人"); } } // 测试用的main方法 public static void main(String[] args) { Directory dir = new Directory(); dir.optionP(); } }
关键细节说明
- 匹配逻辑:用
equalsIgnoreCase可以让用户输入的姓名不区分大小写(比如输入"张三"和"张三"都能匹配),如果你的需求是严格区分大小写,换成equals()就好。 - 多同名处理:如果你的通讯录里有多个同名联系人,删掉循环里的
break,就能显示所有匹配的结果。 - 文件格式适配:如果你的
phone.txt不是用逗号分隔的,比如是空格或制表符,记得修改split的参数(比如split("\\s+")匹配任意空格)。
内容的提问来源于stack exchange,提问作者Scooby
相关产品推荐
相关产品推荐

