如何正确从其他类调用字符串分割方法?Java数据覆盖问题排查
问题分析与解决方案
核心问题
- 构造函数属性被覆盖:你的
Person构造函数里循环处理所有人员信息,但每次循环都会把当前Person对象的surname、name、city重新赋值,后面的人员数据直接覆盖前面的。循环结束后,对象里自然只剩最后一个人的信息。 - 类设计语义不符:一个
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
相关产品推荐
相关产品推荐

