2014-04-21 30 views
0

我從一個txt文件通過掃描儀訪問數據,.txt文件的樣子:訪問數據中設置Java

001 City  5000.00 101 
002 Capital 4000.00 101 
003 Farm  1000.00 102 

我需要這個重新格式化這樣的:

Capital 
City 
Farm 

101 9000.00 
102 1000.00 

我的代碼索爾遠:

try{ 
     Scanner scan = new Scanner(new File("C:\\Users\\Dustin\\Desktop\\test.txt")); 
     String[] strArray = new String[3]; 
     TreeSet<String> ts = new TreeSet<String>(); 
     while(scan.hasNextLine()){ 
      ts.add(scan.nextLine()); 
      //strArray[0] = scan.nextLine(); 
      //StringTokenizer stkn = new StringTokenizer(strArray[0],","); 
      //System.out.println(stkn.nextElement()); 
      //System.out.println(strArray[0]); 
     } 
     for(String s : ts){ 
     System.out.println(s); 
     }catch(Exception e){ 
     System.out.println("Error: "+e.getMessage()); 
} 

但我不知道如何訪問這些數據的個別項目,並添加到組,然後添加這些101它ems在一起。我對此很新,任何幫助將不勝感激。

+0

無法得到您想如何格式化? –

+0

我需要從上面顯示的.txt文件中的數據按屬性類型(城市,大寫等)重新格式化,然後按屬性ID(101,102)排序,如果相同的ID,總和加起來 – hexobolic

+0

首先你需要掃描使用掃描儀輸入。然後使用StringTokenizer將該行標記爲令牌。因此,將字段添加到分類Arraylist中。你可以進一步執行你的邏輯。 –

回答

1

你可以嘗試做如下:

從文本文件中讀取數據,並使用.split(String regex)方法把它分解:

try{ 
     Scanner scan = new Scanner(new File("C:\\Users\\Dustin\\Desktop\\test.txt")); 
     TreeSet<String> ts = new TreeSet<String>(); 
     while(scan.hasNextLine()){ 
      String[] strArray = scan.nextLine().split("\\s+"); //the will yield an array having {"001", "City", "5000.00", "101"} 

既然你想通過ID組,你可以採取看HashMap,並加入這一行:Map<String, Double> map = new HashMap<String, Double>();

TreeSet<String> ts = new TreeSet<String>(); 
Map<String, Double> map = new HashMap<String, Double>() 

當讀取數據時,從該文件,你會檢查是否您已經閱讀值具有相同ID:

​​

而且將數據添加到您的設置:

ts.add(strArray[1]); 

一旦你準備好了,你就需要遍歷集合,然後,打印其內容。一旦你完成了,你需要迭代地圖並打印鍵值對。

話雖這麼說,因爲無論是數據結構迎合訂購,我會建議你包括你把你的樹集爲清楚起見,值的ID:

ts.add(strArray[1] + "(" + strArray[4] + ")"); 
+0

非常感謝npinti!在什麼範圍,如果其他情況發生,在即時循環我假設?什麼範圍被添加?我編譯時得到一個錯誤「3」。 – hexobolic

+0

由於.txt文檔中的空間問題,此問題已得到解決,我將如何着手遍歷集合,創建迭代器或for循環?如何迭代映射鍵值對?再次感謝你的幫助。 – hexobolic

+0

@ user2723341:'if else'將需要在'while'循環中進行。爲了遍歷集合(我假設你指的是我的答案的最後一部分),你只需要沿着你已經在問題結尾處做的事情做些事情。 – npinti

0

對於你的情況,首先閱讀各該文件的行,然後將它傳遞到一個對象(我叫MyRecord):

Scanner scan = new Scanner(new File("C:\\test.txt")); 
       TreeSet<String> ts = new TreeSet<String>(); 
       while(scan.hasNextLine()){ 
        ts.add(scan.nextLine()); 
       } 
       ArrayList<MyRecord> records = new ArrayList<MyRecord>(); 
       for(String s : ts){ 
        System.out.println(s); 
        StringTokenizer st = new StringTokenizer(s," "); 
         MyRecord record = new MyRecord(); 
         record.setOrder(st.nextElement().toString());//001 
         record.setName(st.nextElement().toString());//City 
         record.setNumber(st.nextElement().toString());//5000.00 
         record.setGroup(st.nextElement().toString());//101 
         System.out.println(record.toString()); 
         records.add(record); 
       } 

之後,你有一個ArrayList的許多MyRecord,每個MyRecord在文件
環排在此ArrayList,你是ab樂來做你的要求。
由你自己完成剩下的工作。如果問題 - >評論< - 我會支持。

class MyRecord{ 
    String order, name, group, number; 
    //when calculate number, you need to convert number to number type such as long, double, etc 
    public String getOrder() { 
     return order; 
    } 
    public void setOrder(String order) { 
     this.order = order; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getGroup() { 
     return group; 
    } 
    public void setGroup(String group) { 
     this.group = group; 
    } 
    public String getNumber() { 
     return number; 
    } 
    public void setNumber(String number) { 
     this.number = number; 
    } 
    @Override 
    public String toString() { 
     // TODO Auto-generated method stub 
     return "order: " + order + "| name:" + name + "| number:" + number +"| group" + group; 
    } 

} 
+0

謝謝你的所有幫助tana,我會研究這種方法。我非常感謝你的工作。 – hexobolic