2014-09-28 40 views
0

我有一个输入文件内容如下:阅读在Java中,从文本文件的线条和分割内容

conf/iastedCSN/KangHPLNL06 Quoc V. Phung  
conf/iastedCSN/KangHPLNL06 Kungmeng Lo 
conf/iastedCSN/KangHPLNL06 Hoang Nam Nguyen 
conf/iastedCSN/KangHPLNL06 M. M. Lee  
series/sci/ZighedAB13 Djamel Abdelkader Zighed 
series/sci/ZighedAB13 Rafik Abdesselam 
series/sci/ZighedAB13 Ahmed Bounekkar 
series/sci/LermanG13 Isra챘l-C챕sar Lerman 

而且我要的输出与分隔符如下:

conf/iastedCSN/KangHPLNL06 | QuocV.Phung  
conf/iastedCSN/KangHPLNL06 | KungmengLo 
conf/iastedCSN/KangHPLNL06 | HoangNamNguyen 
conf/iastedCSN/KangHPLNL06 | M.M.Lee  
series/sci/ZighedAB13 | DjamelAbdelkaderZighed 
series/sci/ZighedAB13 | RafikAbdesselam 
series/sci/ZighedAB13 | AhmedBounekkar 
series/sci/LermanG13 | Isra챘l-C챕sarLerman 

但是现在,我得到了很多重复的结果行,我似乎无法找出原因。 我得到的输出如下:

conf/iastedCSN/KangHPLNL06 | QuocV.Phung  
conf/iastedCSN/KangHPLNL06 | KungmengLo 
conf/iastedCSN/KangHPLNL06 | HoangNamNguyen 
conf/iastedCSN/KangHPLNL06 | M.M.Lee  
conf/iastedCSN/KangHPLNL06 | M.M.Lee  
series/sci/ZighedAB13 | DjamelAbdelkaderZighed 
conf/iastedCSN/KangHPLNL06 | M.M.Lee  
series/sci/ZighedAB13 | RafikAbdesselam 
conf/iastedCSN/KangHPLNL06 | M.M.Lee  
series/sci/ZighedAB13 | AhmedBounekkar 
conf/iastedCSN/KangHPLNL06 | M.M.Lee  
series/sci/LermanG13 | Isra챘l-C챕sarLerman 
series/sci/ZighedAB13 | AhmedBounekkar 

下面是源代码:

package authorgraph; 
import java.io.*; 
import java.util.*; 

public class graph { 
    private static BufferedReader br; 

    public static void main(String[] args) 
    { 
     try{ 
     br = new BufferedReader (new FileReader ("inproceedings-author-test1.txt")); 
     Map<String, String> items = new TreeMap<String, String>(); 
     String line; 

     while (null != (line = br.readLine())) 
     { 
      String[] line_parts = line.split(" "); 
      if (line_parts.length > 1) 
      { 
       StringBuilder name = new StringBuilder(line_parts[1]); 
       for (int i = 2; i < line_parts.length; i++) 
       { 
        name.append(line_parts[i]); 
       } 
       items.put(new String(line_parts[0]), name.toString()); 
      } 
      for (String conf: items.keySet()) 
      { 
       System.out.println(conf + " | " + items.get(conf)); 
      } 
     } 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

任何帮助将非常感激

回答

2

new Stringitems.put(new String(line_parts[0]), name.toString());是无用的。字符串是不可变的,如果你已经有一个字符串,就不需要创建一个新字符串。

而且你得到了重复,因为for没有放在正确的位置:每次你读一行时你正在执行它。

 for (String conf: items.keySet()) 
     { 
      System.out.println(conf + " | " + items.get(conf)); 
     } 
     } // end of while 

做的是不是:移动forwhile循环外。

 } // end of while 
     for (String conf: items.keySet()) 
     { 
      System.out.println(conf + " | " + items.get(conf)); 
     } 

而不是做对keySet()一个循环,并,这样做:

 for (Map.Entry<String, String> entry : items.entrySet()) { 
      System.out.println(entry.getKey() + " | " + entry.getValue()); 
     } 

Map<K,V>.entrySet()将返回Map.Entry<K,V>。条目是密钥与其值之间的关联。

+0

你能用预期输出的提取来编辑你的问题吗? – NoDataFound 2014-09-28 11:49:46

+0

我用预期的输出编辑它。我只是通过移除map.entry来获得结果,而不是写入普通字符串。 – fuschia 2014-09-28 11:54:28