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

如何正确从其他类调用字符串分割方法?Java数据覆盖问题排查

问题分析与解决方案

核心问题

  1. 构造函数属性被覆盖:你的Person构造函数里循环处理所有人员信息,但每次循环都会把当前Person对象的surname、name、city重新赋值,后面的人员数据直接覆盖前面的。循环结束后,对象里自然只剩最后一个人的信息。
  2. 类设计语义不符:一个Person实例应该代表单个人员,而不是用来批量解析多个人的数据。把批量处理逻辑塞进Person构造函数,违背了类的单一职责原则。

修正后的代码

调整Person类(仅处理单个人的信息)

public class Person {
    public String surname;
    public String name;
    public String city;

    // 构造函数接收单条人员信息,比如"John.Davidson/Berlin"
    public Person(String singlePersonText) {
        // 按/分割,分离姓名和城市
        String[] nameCitySplit = singlePersonText.split("/");
        this.city = nameCitySplit[1];
        
        // 按.分割姓名,分离姓氏和名字
        String[] fullNameSplit = nameCitySplit[0].split("\\.");
        this.surname = fullNameSplit[0];
        this.name = fullNameSplit[1];
    }
}

在Main类中批量处理并输出

public class Main {
    public static void main(String[] args) {
        String inputText = "John.Davidson/Berlin Michael.Barton/Rome Ivan.Perkinson/Munich";
        // 把输入文本分割成单条人员信息数组
        String[] individualPersonTexts = inputText.split(" ");
        
        // 遍历每条信息,创建Person对象并按要求格式输出
        for (String text : individualPersonTexts) {
            Person person = new Person(text);
            System.out.println(person.surname + "、" + person.name + "、" + person.city);
        }
    }
}

说明

现在Person类专注于解析单个人的信息,职责清晰;批量处理和输出的逻辑放在Main类中,完全符合作业要求(仅在Main中使用System.out),运行后会输出所有人员的信息,而非仅最后一条。

内容的提问来源于stack exchange,提问作者Adam Ricci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:15:51