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

时间:2011-10-26 07:36:59

标签: java string list search

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

列表是这样的。

| Mary Jane,1990,Brown |,| Henry Rollings,1974,Red |

如果我例如搜索“Mary”,那么所有内容都应该在| s之间取出并放入一个单独的列表中。如果此列表中还有一个Mary存在,则需要将其取出。我首先想到在找到名字时使用subStringSplit(),但我失败了。

如果有人想阅读我的伪劣编码,那么http://data.fuskbugg.se/skalman02/6acb2a0c_DATABASGENERATOR.txt

提前致谢!

2 个答案:

答案 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;
}