2011-10-26 77 views
2

我有一个巨大的名称列表,我需要搜索此列表中的单词或数字,然后取出所有字符串单独列表。搜索列表中的单词,然后获取列表中的两个点之间的所有字符串

清单是这样的。

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

如果我例如搜索“玛丽”,那么一切都应该在|之间取出并放入一个单独的列表中。如果再有一个玛丽存在于这个列表中,那么这个列表也需要被取出。当我找到一个名字时,我首先想到了使用subStringSplit(),但是我失败了。

如果有人想读我的伪劣编码,然后提前http://data.fuskbugg.se/skalman02/6acb2a0c_DATABASGENERATOR.txt

谢谢!

+1

可能使用类似http://lucene.apache.org/? –

+0

如果您完全描述问题,我相信会有更好的解决方案,请尝试使用列表的真实示例以及确切的输出结果。 – medopal

+0

| Blont,1988,Adam Moloudnjead |,|Rött,1978,Daniel Johannson |那就是这个列表的一个例子,如果我搜索“Adam”,那么| |之间的所有内容都应该被取出并保存在另一个列表中。我希望我现在清楚。 :) –

回答

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; 
} 
+0

看着这更多,我可以看到这在边缘情况下有一些错误,但这应该仍然让你在正确的方向。 – Juxtaposition

+0

我尝试使用此代码,但无法在(YOUR_HUGE_LIST)中写入我的列表的名称。它给我一个错误,它找不到“stringbuilder”的类。 (Im使用netbeans) –

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

为StringBuilder交换StringBuffer。 – Juxtaposition

相关问题