2013-08-22 97 views
2

我有一個大文件,其中有10,000行,每行的最後都附有日期。一行中的所有字段都是製表符分隔的。有10個日期可用,這10個日期已被隨機分配到所有10,000行。我現在正在編寫一個java代碼,將具有相同日期的所有行寫入單獨的文件,其中每個文件都具有與該日期相對應的行。根據日期字段對文件進行分組時出錯

我試圖使用字符串操作來做到這一點,但是當我試圖根據最新的行進行排序,我在談到日收到錯誤和錯誤說文字超出範圍 。這是我使用的代碼。請看看它讓我知道如果這是正確的方法,如果沒有,請提出一個更好的方法。我試圖將數據類型更改爲Long,但仍然是相同的錯誤。該文件中的行看起來是這樣的: 每個字段是製表符分隔和領域是:

業務ID,類別,城市,biz.name,經度,國家,緯度,類型,日期

* *

qarobAbxGSHI7ygf1f7a_Q [ 「三明治」, 「餐廳」]吉爾伯特新澤西 邁克的替補-111.8120071 AZ 3.5 33.3788385業務06012010

** 的代碼是:

File f=new File(fn); 
    if(f.exists() && f.length()>0) 
    { 
    BufferedReader br=new BufferedReader(new FileReader(fn)); 
    BufferedWriter bw = new BufferedWriter(new FileWriter("FilteredDate.txt")); 

     String s=null; 
     while((s=br.readLine())!=null){ 
      String[] st=s.split("\t"); 

      if(Integer.parseInt(st[13])==06012010){ 

非常感謝您的時間..

+0

06012010 - 此數字以「0」開始 - 它是Java中的八進制數。 –

回答

0

試試這個,

List<String> sampleList = new ArrayList<String>(); 
     sampleList.add("06012012"); 
     sampleList.add("06012013"); 
     sampleList.add("06012014"); 
     sampleList.add("06012015"); 

//

//

String[] sampleArray = s.split(" "); 
       if (sampleArray != null) 
       { 
        String sample = sampleArray[sampleArray.length - 1]; 

        if (sampleList.contains(sample)) 
        { 
         stringBuilder.append(sample + "\n"); 
        } 
       } 
1

我建議不要使用分裂,但在任何情況下,而使用

String str = s.subtring(s.lastIndexOf('\t')); 

,你嘗試採取st[13]當我看到你只有9列。也許你只需要最後st[8]

一兩件事,看this後學什麼06012010的真正含義

+0

非常感謝您的迴應..它的工作! – KRN

+0

@KRN當然有效!任何時候 :) –

相關問題