You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将文本文件存入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:58:24