Java 在列表中搜索一个单词,然后获取列表中两点之间的所有字符串
我有一个巨大的名字列表,我需要在这个列表中搜索一个单词或数字,然后取出一个单独列表中的所有字符串 清单是这样的 |玛丽·简,1990年,布朗,亨利·罗林斯,1974年,红色| 例如,如果我搜索“Mary”,那么所有内容都应该在|之间取出并放在一个单独的列表中。如果列表中还有一个Mary,那么也需要删除。我第一次想到使用subStringSplit()是在找到一个名字时,但我失败了 如果有人想读我的劣质代码,那么Java 在列表中搜索一个单词,然后获取列表中两点之间的所有字符串,java,string,list,search,Java,String,List,Search,我有一个巨大的名字列表,我需要在这个列表中搜索一个单词或数字,然后取出一个单独列表中的所有字符串 清单是这样的 |玛丽·简,1990年,布朗,亨利·罗林斯,1974年,红色| 例如,如果我搜索“Mary”,那么所有内容都应该在|之间取出并放在一个单独的列表中。如果列表中还有一个Mary,那么也需要删除。我第一次想到使用subStringSplit()是在找到一个名字时,但我失败了 如果有人想读我的劣质代码,那么 提前谢谢 我没有测试,但这应该可以。如果这不起作用,请告诉我 编辑:我把代码做得更好
提前谢谢 我没有测试,但这应该可以。如果这不起作用,请告诉我 编辑:我把代码做得更好/更干净了一点
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;
}
列表搜索(字符串搜索){
StringBuilder=新的StringBuilder(您的列表);
列表=新建LinkedList();
对于(int index=0;(index=builder.indexOf(搜索,索引))!=-1;){
final int start=builder.lastIndexOf(“|”,索引);
index=builder.indexOf(“|”,index);
添加(builder.substring(start+1,index));
builder.delete(开始,索引+1);
}
退货清单;
}
我推荐正则表达式匹配器用于此类任务
下面是一个代码示例,可以实现以下功能:
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);
如果你准确地描述了问题,我相信会有更好的解决方案,试着用一个真实的例子来说明列表的内容和确切的输出结果。| Blont,1988,Adam Moloudnjead,| Rött,1978,Daniel Johannson |如果我搜索“Adam”,这就是这个列表的一个例子然后|之间的所有内容都应取出并保存在另一个列表中。我希望我现在清楚了。:)再看看这个,我可以看到它在边缘案例中有一些bug,但这仍然会让你走上正确的方向。我尝试使用这段代码,但我无法在(你的庞大列表)中写入我的列表名称。它给了我一个错误,它找不到“stringbuilder”类。(Im使用netbeans)为StringBuilder交换StringBuffer。