如何在此作业中将字符串拆分为列表?JAVA
我有一根这样的绳子。如何在此作业中将字符串拆分为列表?JAVA,java,regex,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:
<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.replace()
删除
标记。然后你可以对单词“Member”执行String.split()
一种更受控制但复杂的方法是,在换行符上拆分()
,然后读取每一行,检查是否有startsWith()
,然后填写适当的数据。考虑到上面的结果没有多大帮助,这还允许您实际创建一个记录对象,并逐行填充它。我要做的是这个伪代码:
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)
成员newMember=null;
列表结果=新建ArrayList();
每行
修剪空白
//控制新对象
如果行以“成员ID:”开头:
如果是新成员!=无效的
结果。添加(新成员);
newMember=新成员()
//向当前对象添加值
如果是新成员,则为其他!=null(开始时没有创建对象)
如果行以“field1:”开头:
setField1(解析第行中的值)
否则,如果行以“field2:”开头:
setField2(从第行解析值)
如果您的输入格式正确,它就足够了。您的元素顺序没有改变,但是您希望创建一个bean的列表。
我可以建议在这种情况下改用吗?它们是可以使用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;
}
String html=”“;
列表l=新的ListArray();
int指数=0;
而((index=html.indexOf(“成员”,index))>-1){
//nextIndex是第一个元素的结尾。
int-nextIndex=html.indexOf(“
\n
”,索引);
String元素=html.substring(index,nextIndex);
//解析元素字符串以创建dynabeans
DynaBean=createDynaBean(元素);
l、 添加(bean);
指数=nextIndex;
}
我没有提供创建dynabean的代码。请看这里的示例,了解如何使用。由于在列表中有一个字符串预先表示1个元素
,因此应该很容易使用split()
或indexOf()
等来获取所需元素的值。我将首先在\n
上拆分,然后在:
上拆分,这将为每行提供键和值
希望这能有所帮助。这里有一个简单的解决方案:
String[] parts = input.split("(?m)\\s*(^.*<.*$)+\\s*");
迭代它,忽略你不想要的东西。假设“搜索结果:”标记了一个新人,请执行以下操作:
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());
}
List peopleList=new ArrayList();
Map person=null;
用于(字符串部分:部分){
如果(!part.contains(“:”)| person==null)继续;
if(parts.startsWith(“搜索结果”)){
person=newhashmap();
人员列表。添加(个人);
继续;
}
字符串[]nameValue=part.trim().split(“:”);
person.put(nameValue[0].trim(),nameValue[1].trim());
}
现在您有了一个地图列表,每个地图都有“Member ID”=“10149”等条目我会这样做:
// 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
//删除空格和标记
html=html.replaceAll((?m)(|搜索结果:|^*),“”);
//删除空行
html=html.replaceAll(“(?m)^[\t]*\r?\n”,”);
//按换行符拆分
字符串[]结果=html.split(\\n)
//使用结果
然后,您可以使用:
拆分每个结果[i]
,以获得键和值。首先根据
\n
进行拆分,然后使用
字符拆分数组[1]元素,然后对所有拆分的字符串进行迭代,然后执行任何您想要的操作 请你重新格式化一下你的问题好吗:不清楚你想做什么(你是用HTML输入的,还是用HTML在这里格式化的?)。另外,你也可以发布你自己尝试过的东西,并解释失败的原因吗?谢谢。到目前为止你都试了些什么?你有什么想法?首先,你应该考虑一下要遵循的程序。举例来说,开始阅读每一行,为每一行确定它是哪个字段,将它添加到一些时间结构中,然后继续。决定何时必须生成新成员(例如,在找到成员id字段时)。然后,如果你在做一些事情(分割行、删除空白、迭代等)时遇到困难,可以发布一个更具体的问题
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());
}
// 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