从.txt读取并存储到Hashmap中

时间:2011-12-29 05:41:05

标签: java hashmap java-io

我可以使用任何其他方法将.txt文件中以分号分隔的字符串读取到Has map而不是* sourceArra * y

 public static void main(String[] args) throws IOException {
    try {
        ArrayList<Synset> booleansynsets = null;
        ArrayList<Synset> booleanduplicatesynsets = null;
        Map<String, String> basebooleanentitieslist = new HashMap<String, String>();
        BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\anand\\Desktop\\updatedDuplicateBooleanEntitiesList-sorted.txt"));
        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            String[] sourceArray = line.split(";");
            basebooleanentitieslist.put(sourceArray[0],sourceArray[1]);
            System.out.println(line);
        }

//更新后的

bufferedReader.toString();
        StringTokenizer st1 = new StringTokenizer(bufferedReader.toString(),";");
        while ((line = bufferedReader.readLine()) != null && st1.hasMoreTokens()) {
  //                String[] sourceArray = line.split(";");

            basebooleanentitieslist.put(st1.nextToken(";"), st1.nextToken());
            System.out.println(line);
        }

3 个答案:

答案 0 :(得分:0)

考虑使用StringTokenizer类。

答案 1 :(得分:0)

您可以使用StringTokenizer(或)拆分。

答案 2 :(得分:0)

  

目前的方法没有问题,但感觉它是否冗长,我的意思是有一种方法来优化它而不使用sourceArray。

您没有说出您要优化的内容:性能?内存使用情况?可读性?

如果您担心表现,下一个问题是您的担忧是否合理。你运行你的申请了吗?太慢了吗?您是否对其进行了分析并确定分割线路需要花费大量时间?

使用数组有什么特别的错误? (是的,我知道分配数组会花费一些东西,但是你有证据证明这是重要的吗?)


如果您正在尝试优化可读性,那么我会说使用String.split对于此示例可能更具可读性。 (许多Java程序员从未遇到/使用过StringTokenizer类。)

如果您正在尝试针对性能/内存使用进行优化,那么StringTokenizer值得尝试,但我不能保证它更快。另一种方法是直接使用PatternMatcher,如下所示:

    Pattern pattern = Pattern.compile("([^;]*);(.*)");
    while ((line = bufferedReader.readLine()) != null) {
        Matcher matcher = pattern.matcher(line)
        if (matcher.matches()) {
            basebooleanentitieslist.put(matcher.group(1), matcher.group(2));
        }
    }

(顺便说一下,代码将处理行没有正常拆分的情况;即没有抛出异常。如果你想明确处理它,添加一个else子句。)< / p>