0

我有一个存储为文本文件的列表,这样存储

Id;name;function

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

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

我正在尝试做的是查看列表中是否有诸如“0x0640e331”之类的ID。如果它是找到该 Id 的文本行上的所有内容。所以会发生休耕,

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

搜索 0x0640e331 将返回 0x0640e331;name1;function。

有任何想法吗?

4

5 回答 5

1

使用这样的startsWith方法...

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

这基本上检查数组列表中的给定行是否以您的query字符串开头。如果不止一行,只需将其添加到另一个 ArrayList 中并将其作为结果返回。

于 2013-03-04T06:20:36.643 回答
0
Use Map<String,List>

将您的 id 作为键存储在 Map 中并检索键上的值

于 2013-03-04T06:20:40.483 回答
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"));
    }
}
于 2013-03-04T06:27:08.160 回答
0

您可以对列表中的每个元素使用 UseMap<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"));
于 2013-03-04T06:33:33.110 回答
0

如果您有一个大文件,因此您不想全部阅读,并且文件中的行按 id 排序,您可以使用 RandomAccessFile实现自己的二进制搜索算法。要在随机位置读取行,首先选择位置,然后向前和向后读取,直到一个新的行符号。

于 2013-03-04T07:05:15.527 回答