我有一个巨大的名单,我需要在这个列表中搜索一个单词或数字,然后在单独的列表中取出所有字符串。
列表是这样的。
| Mary Jane,1990,Brown |,| Henry Rollings,1974,Red |
如果我例如搜索“Mary”,那么所有内容都应该在| s之间取出并放入一个单独的列表中。如果此列表中还有一个Mary存在,则需要将其取出。我首先想到在找到名字时使用subStringSplit(),但我失败了。
如果有人想阅读我的伪劣编码,那么http://data.fuskbugg.se/skalman02/6acb2a0c_DATABASGENERATOR.txt
提前致谢!
答案 0 :(得分:1)
我建议使用正则表达式Matcher来完成这些任务。
这是一个代码示例应该可以解决这个问题:
String inputList = "|Mary Jane, 1990, Brown|,|Henry Rollings, 1974, Red|,|Mary Mary Mary, 1974, Red|,|Someone Else, 1974, Red|";
StringBuffer listWithMatchesRemoved = new StringBuffer();
StringBuffer matchedItems = new StringBuffer();
String searchString = "Mary";
Pattern p = Pattern.compile("([|][^|]*?"+searchString+"[^|]*?[|]),?");
Matcher m = p.matcher(inputList);
while(m.find())
{
if(matchedItems.length()!=0)
matchedItems.append(",");
matchedItems.append(m.group(1));
m.appendReplacement(listWithMatchesRemoved, "");
}
m.appendTail(listWithMatchesRemoved);
System.out.println("Matches:" + matchedItems);
System.out.println("The rest:" + listWithMatchesRemoved);
答案 1 :(得分:0)
我没有测试,但这应该有效。告诉我,如果这不起作用。
编辑:我使代码更好/更清洁。List<String> searchFor(String search) {
StringBuilder builder = new StringBuilder(YOUR_HUGE_LIST);
List<String> list = new LinkedList<String>();
for (int index = 0; (index = builder.indexOf(search, index)) != -1; ){
final int start = builder.lastIndexOf("|", index);
index = builder.indexOf("|", index);
list.add(builder.substring(start + 1, index));
builder.delete(start, index + 1);
}
return list;
}