列表项目包含此
问题描述:
我有保存为文本文件列表,存储等列表<string>项目包含此
Id;name;function
我有一个函数,它的文本文件,并通过行读取它的行,每行文本是列表中的新项目。通过下休耕实现。
List<String> list
list.add(line);
我想要做的是看看是否有一些Id例如“0x0640e331”在列表中。并且,如果这是找到该文本行的所有内容。所以休耕会发生,
0x0604f552;name0;function
0x0640e331;name1;function
0x0342t521;name2;function
搜索0x0640e331将返回,0x0640e331; NAME1;功能。
任何想法?
答
使用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中并作为结果返回。
答
Use Map<String,List>
存储您的ID作为Map键和检索关键
答
值你可以使用,而不是一个列表中的地图。见下面
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"));
}
}
答
您可以使用使用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"));
答
如果您有一个很大的文件,所以你不想读取它们,你的文件中的行按ID排序,你可以使用RandomAccessFile实现你自己的binary search算法。要在随机位置读取线条,首先选择位置,然后向前和向后读取,直到出现新的线条符号。
您应该实现HashMap来实现此目的。使用列表,与HashMap相比,您将实现的检索性能将会降低。 如果你想用list来做,你可以使用'tokenizer'或'String#startsWith'来迭代和检查密钥的存在。在这种情况下,订单将等于O(n)。 –
D3V
2013-03-04 07:05:54