2013-08-22 46 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当然有效!任何时候 :) –

相关问题