如何解析String并将多个值发送到构造函数

时间:2017-01-06 02:50:16

标签: java arrays parsing constructor

我正在做一个类赋值,我必须将给定的字符串解析为不同类型的变量。不同的变量是:姓名,姓氏,出生日期,出生城市。完成此操作后,需要将变量发送到类Person 的构造函数。

我坚持如何将三个不同的值分配给变量,然后将其发送回构造函数。我已经尝试为每个变量声明一个数组,然后用值for循环填充它然后我遇到麻烦找到一个声明它的长度的整洁方式加上我想我需要将数组转换回字符串才能通过构造函数的值和结果代码将是混乱的。有更简单的方法吗?

我不知道这是否会改变代码中的任何内容,但在将值传递给构造函数之后,我需要将该对象发送到List集合并使用它来打印有关每个人的详细信息。

这是我目前的代码:

    public static void main(String[] args) {

    // Given string to parse
    String text = "John.Davidson/05051988/Belgrade Michael.Barton/01011968/Krakov Ivan.Perkinson/23051986/Moscow";

    String[] parsArray = text.split("[ /.]+");

    // Results from parsing
    for (Object s: parsArray)
    {
        System.out.println(s);
    } 

    for (int i = 0; i<parsArray.length; i+=4)
    {
        String firstName = parsArray[i];
        String lastName = parsArray[i+1];
        String birthPlace = parsArray[i+3];
        System.out.println("\nFirst name: " + firstName + "\nLast name: " + lastName + "\nCity of birth: " + birthPlace);
    }           
 }
 }

类人及其构造函数:

import java.time.LocalDate;

public class Person {
String name;
String surname;
LocalDate dob;
String placeOfBirth;

public Person(String name, String surname, LocalDate dob, String placeOfBirth)
{
this.name = name;
this.surname = surname;
this.dob = dob;
this.placeOfBirth = placeOfBirth;
}  
}

2 个答案:

答案 0 :(得分:0)

使用SpringSessionBackedSessionRegistry(FindByIndexNameSessionRepository<? extends ExpiringSession> sessionRepository) 存储ArrayList个对象

Person

答案 1 :(得分:0)

您走在正确的轨道上,但我认为如果您能够以帮助您隔离问题的方式构建代码,您将取得一些进展。目标是将问题分解成足够小的部分,以解决简单,有凝聚力的功能。在尝试填写详细信息之前,我喜欢草拟类或方法。但首先,我首先谈谈我的问题。

目标是将单行文本转换为特定于类型的Person对象的集合。输入使用单个空格作为记录分隔符,&#39;。将姓氏与姓氏分开的句号,以及&#39; /&#39;斜杠以分隔记录中的其他字段。啊......经典。

第一步是仅隔离处理每个单独记录的文本块。我可以看到,因为我注意到关于输入文本的第一件事是它使用空格来分隔关于不同人的信息。不需要尝试编写试图吞下鲸鱼的代码,对吗?

String[] parseRecords(String input) {
    return input.split("[ ]+");
}

现在记录彼此隔离,我们需要一种方法来从仅包含单个记录的文本块产生Person记录,即仅包含关于单个人的信息的原始输入的子集。在我的问题描述中,我注意到两者都是&#39;。&#39;和&#39; /&#39;用作字段分隔符,因此我们可以将字段分隔成字段。还有很多其他方法来编写这个正则表达式,但我已经复制了你在问题中使用的方法。

Person parsePersonFromString(String text) {
  String[] fields = text.split("[./]+");
  LocalDate dob = /* something with field[2] */
  return new Person(fields[0], fields[1], dob, fields[3]);
}

请注意,字符串的split数组应该具有长度4.前两个字段是名称,因此它们已经是String类型。同样适用于城市领域。日期字段有点棘手,因为你有一个字符串,你想要一个LocalDate。由于这是家庭作业,我会把细节留给你,但请记住,如果你遇到麻烦,这也是你可以分解成一个更简单的问题!

LocalDate parseDateFromField(String field) {
}