在Java中拆分复杂的String。

时间:2015-07-29 11:05:01

标签: java regex list split tokenize

我使用这种格式的用户介绍了一个复杂的字符串:

  

姓名:John

     

姓:Doe Patrick

     

年龄:三十一岁   `

我想拆分并解析为具有这3个属性的对象Person,但我不想在这个类的属性中包含字段(Name:,Surname:,Age :)。

你能帮我找一个正则表达式或其他方法吗? 非常感谢你!

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式,它会在每一行中接收"之后的所有内容:" (两点)。

(?<=:\s)([^\n]+)

Regex live here.

答案 1 :(得分:0)

你应该清楚知道字符串格式是什么。例如,如果:可能出现的唯一位置是字段名称及其值之间,那么您可以使用一个好的模式。按新行分割,然后按:分割将产生类似键值对的内容,因此您可以将每对的[0]元素映射为字段名称,这样您就可以知道将值放在何处(姓名,年龄等......)。

以下算法效率不高,您可以使用正则表达式对其进行简化以进行常规拆分,但它显示了任务的简单性

        String s = "Name: John\n" +
                "\n" +
                "Surname: Doe Patrick\n" +
                "\n" +
                "Age: Thirty-one";

        String[] lines = s.split("\n");
        for (String line : lines) {
            if (line.trim().equals("")) {
                continue;
            }

            String[] pair = line.split(":");
            if (pair[0].trim().equals("Name")) {
                System.out.println("Name is " + pair[1].trim()); // assign to the corresponding property
            } else if (pair[0].trim().equals("Surname")) {
                System.out.println("Surname is " + pair[1].trim());
            } else if (pair[0].trim().equals("Age")) {
                System.out.println("Age is " + pair[1].trim());
            }
        }

输出结果为:

Name is John
Surname is Doe Patrick
Age is Thirty-one