Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在列表中搜索一个单词,然后获取列表中两点之间的所有字符串_Java_String_List_Search - Fatal编程技术网

Java 在列表中搜索一个单词,然后获取列表中两点之间的所有字符串

Java 在列表中搜索一个单词,然后获取列表中两点之间的所有字符串,java,string,list,search,Java,String,List,Search,我有一个巨大的名字列表,我需要在这个列表中搜索一个单词或数字,然后取出一个单独列表中的所有字符串 清单是这样的 |玛丽·简,1990年,布朗,亨利·罗林斯,1974年,红色| 例如,如果我搜索“Mary”,那么所有内容都应该在|之间取出并放在一个单独的列表中。如果列表中还有一个Mary,那么也需要删除。我第一次想到使用subStringSplit()是在找到一个名字时,但我失败了 如果有人想读我的劣质代码,那么 提前谢谢 我没有测试,但这应该可以。如果这不起作用,请告诉我 编辑:我把代码做得更好

我有一个巨大的名字列表,我需要在这个列表中搜索一个单词或数字,然后取出一个单独列表中的所有字符串

清单是这样的

|玛丽·简,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。