我有这样的字符串。
<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
感谢您的帮助!
答案 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]元素,然后遍历所有拆分的字符串,然后根据需要进行迭代。