如何将字符串拆分为此作业中的列表? Java的

时间:2011-10-14 09:58:30

标签: java regex

我有这样的字符串。

<body>
Search Results:
<br>
<br>

    Member ID: 10149
    <br>
    Title:
    <br>
    First Name: Skye
    <br>
    Middle Name: Susan
    <br>
    Last Name: Sommers
    <br>
    Comment: Entry Report completed.
    <br>
    Time Stamp: 2011-10-13 14:43:36
    <br>
    Select Agent: Century 21
    <br>
    Agent Details: Peter Thorpe Century 21 33 Diamond Drive Newcastle NSW 2300
    <br>
    Street: 49 Fairway Court
    <br>
    Suburb: Newcastle
    <br>
    Postcode: 2300
    <br>
    <br>
    Member ID: 10149
    <br>
    Title:
    <br>
    First Name: Skye
    <br>
    Middle Name:
    <br>
    Last Name: Sommers
    <br>
    Comment: Qtr inpection showed residence in very good condition. Walls and floors very clean. Back and front yard both neatly kept.
    <br>
    Time Stamp: 2011-10-13 12:40:31
    <br>
    Select Agent: Century 21
    <br>
    Agent Details: Peter Thorpe Century 21 33 Diamond Drive Newcastle NSW 2300
    <br>
    Street: 49 Fairway Court
    <br>
    Suburb: Newcastle
    <br>
    Postcode: 2300

如何将String拆分为带有第一个成员的数组的Array:

Member ID: 10149 
 Title: 
 First Name: Skye 
 Middle Name: Susan 
 Last Name: Sommers 
 Comment: Entry Report completed. 
 Time Stamp: 2011-10-13 14:43:36 
 Select Agent: Century 21 
 Agent Details: Peter Thorpe Century 21 33 Diamond Drive Newcastle NSW 2300 
 Street: 49 Fairway Court 
 Suburb: Newcastle 
 Postcode: 2300

感谢您的帮助!

6 个答案:

答案 0 :(得分:1)

由于潜在的冲突,很难快速完成。您可以使用String.replace()删除<br>代码。然后你可以在“会员”这个词上做String.split(),但如果“会员”出现在其他任何地方,它就会破裂。

更有控制但更复杂的方法是在换行符上split(),然后读取每一行,检查startsWith()然后填写适当的数据。考虑到上面的结果并没有多大帮助,这也可以让您实际创建一个Record对象并逐行填充。

答案 1 :(得分:1)

您的元素顺序没有变化,但是您想要创建List个bean。 我建议在这种情况下使用Apache Commons DynaBeans吗?它们是您可以动态创建的对象,并使用bean.get("key");访问值,您可以使用bean.set("key", "value");

设置值

所以你可以做的是使用以下内容分割你的html:

String html = "<your html>";
List l = new ListArray();
int index = 0;
while((index = html.indexOf("Member", index)) > -1) {
   //nextIndex is the end of the first element.
   int nextIndex = html.indexOf("<br>\n<br>",index);
   String element = html.substring(index, nextIndex);
   //parse element string to create dynabeans
   DynaBean bean = createDynaBean(element);
   l.add(bean);
   index = nextIndex;

}

我没有提供创建dynabean的代码。看看这里有关如何create a dynabean的例子。由于您的List中有一个字符串预先表示1个元素,因此应该很容易使用split()indexOf()等来获取所需元素的值。我首先拆分\n,然后拆分:,这将为每条线提供关键和价值。

希望这有帮助。

答案 2 :(得分:0)

我要做的是这个伪代码:

Member newMember = null;
List<Member> result = new ArrayList<Member>();

for each line
   trim whitespace
   // control new objects
   if line starts with "Member ID:"
      if newMember != null
          result.add(newMember);
      newMember = new Member()

   // add values to the current object
   else if newMember != null (at the beginning there's no created object)
      if line starts with "field1:"
         newMember.setField1(parse value from line)
      else if line starts with "field2:"
         newMember.setField2(parse value from line)

如果输入结构良好,那就足够了。

答案 3 :(得分:0)

这是一个单行解决方案:

String[] parts = input.split("(?m)\\s*(^.*<.*$)+\\s*");

从上面的输入中,这将为您提供:

[, Search Results:, , Member ID: 10149, Title:, First Name: Skye]

迭代它,忽略你不想要的东西。假设“搜索结果:”标记新人,请执行以下操作:

List<Map<String, String>> peopleList = new ArrayList<Map<String, String>>();
Map<String, String> person = null;
for (String part : parts) {
    if (!part.contains(":") || person == null) continue;
    if (parts.startsWith("Search Results")) {
        person = new HashMap<String, String>();
        peopleList.add(person);
        continue;
    }
    String[] nameValue = part.trim().split(":");
    person.put(nameValue[0].trim(), nameValue[1].trim());
}

现在您有一个地图列表,每个地图都有“会员ID”=“10149”等条目

答案 4 :(得分:0)

我会这样做:

// remove spaces and tags
html = html.replaceAll("(?m)(<.*?>|Search Results:|^ *)", "");
// remove empty lines
html = html.replaceAll("(?m)^[ \t]*\r?\n", "");
// split by newlines
String[] results = html.split("\\n")
// use results

然后,您可以使用results[i]拆分每个:以获取密钥和值。

答案 5 :(得分:0)

首先根据<br>\n<br>进行拆分,然后使用<br>字符拆分数组[1]元素,然后遍历所有拆分的字符串,然后根据需要进行迭代。