在Java中拆分复杂字符串。

在Java中拆分复杂字符串。,java,regex,list,split,tokenize,Java,Regex,List,Split,Tokenize,我看到了用户使用以下格式引入的复杂字符串: 姓名:约翰 姓:多伊·帕特里克 年龄:三十一岁 ` 我想拆分并解析成一个具有这3个属性的对象Person,但我不想在这个类的属性中包含字段(名称:,姓氏:,年龄:) 你能帮我找到一个regexp或其他方法来做这件事吗? 非常感谢你 试试这个正则表达式,它会把“:”(两个点)后面的每一行都记下来 (?您应该清楚字符串格式可能是什么。例如,如果:只能出现在字段名及其值之间,那么您有一个好的模式,可以遵循。按新行拆分,然后按:将生成类似于键值对的内容,因此您

我看到了用户使用以下格式引入的复杂字符串:

姓名:约翰

姓:多伊·帕特里克

年龄:三十一岁 `

我想拆分并解析成一个具有这3个属性的对象Person,但我不想在这个类的属性中包含字段(名称:,姓氏:,年龄:)

你能帮我找到一个regexp或其他方法来做这件事吗?
非常感谢你

试试这个正则表达式,它会把“:”(两个点)后面的每一行都记下来


(?您应该清楚字符串格式可能是什么。例如,如果
只能出现在字段名及其值之间,那么您有一个好的模式,可以遵循。按新行拆分,然后按
将生成类似于键值对的内容,因此您可以映射
[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
Name is John
Surname is Doe Patrick
Age is Thirty-one