【问题标题】:How to create a Person object by splitting a string如何通过拆分字符串来创建 Person 对象
【发布时间】:2020-08-23 08:04:43
【问题描述】:

我必须使用split 方法(“”); 我想我应该使用for 循环来获取与Person 类的字段对应的值,但是我该怎么做以及如何创建Person 对象并将其添加到对象列表中? 我已经这样做了:

    String[] peopleArray = warehouse.split(" ");
    String[][] personArray = new String[peopleArray.length][4];
    for (int i = 0; i < peopleArray.length; i++) {
        personArray[i] = peopleArray[i].split("/|\\.");
        
        for (String field : personArray[i]) {
            
            System.out.print(field + " ");
        }
        System.out.println(" ");

我无法使用此方法获取字段

Person 类是使用姓名、姓氏、出生日期和出生地点等字段创建的。

这是我的 Person 类

package warehouse;

导入 java.time.LocalDate; 导入 java.time.format.DateTimeFormatter;

公共类人{

public String name;

public String lastname;

public LocalDate dateOfBirth;

public String placeOfBirth;

DateTimeFormatter FORM = DateTimeFormatter.ofPattern("dd.MMM yyyy.");


public Person(String name, String lastname, LocalDate dateOfBirth, String placeOfBirth) {

    this.name = name;

    this.lastname = lastname;

    this.placeOfBirth = placeOfBirth;

    this.dateOfBirth = dateOfBirth;

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public String getPlaceOfBirth() {
    return placeOfBirth;
}

public void setPlaceOfBirth(String placeOfBirth) {
    this.placeOfBirth = placeOfBirth;
}

public String getLocation() {
    return dateOfBirth.format(FORM);
}

public void setDateOfBirth(LocalDate dateOfBirth) {
    this.dateOfBirth = dateOfBirth;
}
@Override

public String toString() {

    return ("Name: " + name + " ; " + "Lastname: " + lastname + " ; " + "Date of birth: " + dateOfBirth.format(FORM) + " ; "
            + "Place of birth: " + placeOfBirth);

}

}

【问题讨论】:

  • 您必须编写一个映射器,用于字符串数组到人员对象转换的设置人员字段,以尊重位置
  • 创建 Person POJO 类。还为此 POJO 创建名称 setter 和 getter。然后在你的数组中有元素基于 / 拆分后。所以你在第 [0] 个索引中有人名。获得第 0 个索引后,您可以将该名称设置为 setter 方法。设置后,您可以根据需要添加到列表中
  • 你得到了什么输出?
  • @R.Wang John Davidson 05082004 贝尔格莱德 Michael Barton 01011998 Krakov Ivan Perkinson 23051986 莫斯科
  • @SathishKumarJ 不能使用 setter,它说我不能使用 String[] 作为字符串,或者类似的东西

标签: java


【解决方案1】:
public static void main(String[] args) throws IOException, NoSuchFieldException, IllegalAccessException, ParseException {
    String warehouse = "John.Davidson/05082004/Belgrade Michael.Barton/01011998/Krakov Ivan.Perkinson/23051986/Moscow";
    String[] peopleArray = warehouse.split(" ");
    List<Person> persons = new ArrayList<>();
    for (int i = 0; i < peopleArray.length; i++) {
        String[] person = peopleArray[i].split("/|\\.");
        SimpleDateFormat format1 = new SimpleDateFormat("ddMMyyyy"); // first example
        Date d1 = format1.parse(person[2]);
        persons.add(new Person(person[0], person[1], d1, person[3]));
    }
}

这可能适用于以下人员类别:

static class Person {
    String name;
    String lastName;
    Date date;
    String place;

    public Person(String name, String lastName, Date date, String place) {
        this.name = name;
        this.lastName = lastName;
        this.date = date;
        this.place = place;
    }
}

【讨论】:

  • 谢谢,我将它改编为我所拥有的,并且像魅力一样工作。
猜你喜欢
  • 2017-03-30
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2020-02-18
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多