【问题标题】:Split a complex String in Java.在 Java 中拆分复杂的字符串。
【发布时间】:2015-07-29 11:05:01
【问题描述】:

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

姓名:约翰

姓:Doe Patrick

年龄:三十一 `

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

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

【问题讨论】:

    标签: java regex list split tokenize


    【解决方案1】:

    试试这个正则表达式,它会在每一行中包含“:”(两个点)之后的内容。

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

    Regex live here.

    【讨论】:

      【解决方案2】:

      您应该清楚知道字符串格式可能是什么。例如,如果: 可能出现的唯一位置是字段名称和它的值之间,那么您就有了一个很好的模式,您可以遵循它。按新行拆分,然后按: 拆分将产生类似键值对的结果,因此您可以将每对的[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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多