2011-12-29 87 views
0

我可以用任何其他方法来读取.TXT文件中的分号分隔字符串成了地图,而不是* sourceArra * Y从.txt读取和存储到的Hashmap

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); 
     } 
+1

什么是(目前)这种方法的问题? – adatapost 2011-12-29 05:50:24

+0

您的方法非常简单直接,过度优化只会使其变得复杂。 – medopal 2011-12-29 06:10:43

+0

目前的方法没有问题,但感觉是否它的长度,我的意思是有没有方法来优化它,而不使用sourceArray。 – 2011-12-29 06:10:46

回答

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条款。)

+0

thanx stephen ...你对演出的解释是kool ....我明白了......;) – 2011-12-29 13:04:27

0

考虑使用StringTokenizer类。

+0

你可以请检查修改后的代码从... – 2011-12-29 06:11:05

+0

请认为你的新代码通过。你原来的代码几乎是正确的,你读了一行,然后把它分成令牌。当您使用StringTokenizer时,您应该在使用nextToken()之前检查hasToken(),因为您的输入中可能存在一些错误,如果令牌不存在并且您希望优雅地失败。 – 2011-12-29 06:36:37

0

可以使用StringTokenizer(或)拆分。