2011-12-29 64 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(或)拆分。