2013-03-04 61 views
0

我有保存为文本文件列表,存储等列表<string>项目包含此

Id;name;function 

我有一个函数,它的文本文件,并通过行读取它的行,每行文本是列表中的新项目。通过下休耕实现。

List<String> list 
list.add(line); 

我想要做的是看看是否有一些Id例如“0x0640e331”在列表中。并且,如果这是找到该文本行的所有内容。所以休耕会发生,

0x0604f552;name0;function 
0x0640e331;name1;function 
0x0342t521;name2;function 

搜索0x0640e331将返回,0x0640e331; NAME1;功能。

任何想法?

+0

您应该实现HashMap 来实现此目的。使用列表,与HashMap相比,您将实现的检索性能将会降低。 如果你想用list来做,你可以使用'tokenizer'或'String#startsWith'来迭代和检查密钥的存在。在这种情况下,订单将等于O(n)。 – D3V 2013-03-04 07:05:54

回答

1

使用startsWith method这样的...

ArrayList<String> queryResult = new ArrayList<String>(); 
String query = "0x0640e331"; 
for(String line : list) { 
    if(line.startsWith(query)) { 
    queryResult.add(line); 
    } 
} 
return queryResult; 

如果在数组列表中给出符合你query字符串开头这基本上检查。如果有多行,只需将它添加到另一个ArrayList中并作为结果返回。

0
Use Map<String,List> 

存储您的ID作为Map键和检索关键

0

值你可以使用,而不是一个列表中的地图。见下面

import java.util.HashMap; 
import java.util.Map; 
import java.util.StringTokenizer; 

public class TextProgram { 
    public static void main(String args[]) { 
     String lineArray[] = { "0x0604f552;name0;function", 
       "0x0640e331;name1;function", "0x0342t521;name2;function" }; 
     Map<String, String> map = new HashMap<String, String>(); 
     StringTokenizer tokenizer = null; 
     for (String string : lineArray) { 

      tokenizer = new StringTokenizer(string, ";"); 
      map.put(tokenizer.nextToken(), string); 
     } 
     System.out.println(map.get("0x0640e331")); 
    } 
} 
0

您可以使用使用Map<String,String>列表中的每个元素得到字符串,并将其存储在地图

伪代码给出的示例程序:

for(String item : list) { 

String keyName= //use substring to get the id value from the string variable 'item' 

map.put(keyName,item); 
} 
System.out.println(map.get("0x0640e331")); 
0

如果您有一个很大的文件,所以你不想读取它们,你的文件中的行按ID排序,你可以使用RandomAccessFile实现你自己的binary search算法。要在随机位置读取线条,首先选择位置,然后向前和向后读取,直到出现新的线条符号。