2014-02-24 21 views
0

基本上我想在這裏做的是在一個文本文件中逐行閱讀,並像這樣格式化它們: 姓氏,標題,名字,中間,然後出生/死亡日期像MM/DD/YYYY格式化/分隔java中的字符串的名稱和日期?

我在閱讀的日期如下:

Month, day, year 
Mon. day, year 
Mon day, year 
MMDDYY 
M/D/year 
M-D-year 

和名稱如下:

Last, Title First Middle (comma after name needed) 

OR

Title First Middle Last 

我一直在這個工作很長一段時間,只是無法弄清楚。下面是我非常雜亂的代碼,經歷了很多改變,試圖弄清楚這一點,謝謝你的時間任何人想幫助我(我是學生),這裏也是一個讀取名字的例子在:

Roger Veium MAY  12, 1908  JUNE 2, 1984 
McDermott, James D.  Jan. 4, 1914  Jul 1, 1970 
Amy Chamberlain Sep.  28, 1975 09-06-95 
Gross, Adam M. 01-03-77 
Joseph Lisota April 9, 1964 
Joseph W. Eisel Sep 3, 1990 

代碼:

public String[] readLines(String filename) throws IOException { 
    FileReader fileReader = new FileReader(filename); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 
    List<String> lines = new ArrayList<String>(); 
    List<String> names = new ArrayList<String>(); 
    String line = null; 
    String name = ""; 
    int i; 
    int ind; 
    int indTemp; 
    int indTemp2; 
    boolean flag = false; 
    String[] monthsLong = {"JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"}; 
    String[] monthsLongR = {" 01", "02", " 03", "04", "05", "06", "07", "08", " 09", "10", "11", "12"}; 
    String[] monthsLow = {"JAN\\.", "FEB\\.", "MAR\\.","APR\\.", "MAY", "JUN\\.", "JUL\\.", "AUG\\.", "SEP\\.", "OCT\\.", "NOV\\.", "DEC\\."}; 
    String[] monthsCaps = {" JAN", "FEB", " MAR", "APR", "MAY", "JUN", "JUL", "AUG", " SEP", "OCT", "NOV", "DEC"}; 

    while ((line = bufferedReader.readLine()) != null) { 
     line = line.replaceAll("null", ""); 
     line = line.replaceAll("-","/"); 
     line = line.toUpperCase() ; 

     for(i = 0; i<12; i++) 
     { 
      line = line.replaceAll(monthsLong[i], monthsLongR[i]); 
     } 

     for(i = 0; i<12; i++) 
     { 
      line = line.replaceAll(monthsLow[i], monthsLongR[i]); 
     } 

     for(i = 0; i<12; i++) 
     { 
      line = line.replaceAll(monthsCaps[i], monthsLongR[i]); 
     } 

     line = line.replaceAll("\\s+", " "); 
     if (Character.toString(line.charAt(0)).equals(" ")) 
      line = line.replaceFirst(" ", ""); 

/*  name = line; 

     ind = name.indexOf("."); 
     indTemp = name.indexOf("0"); 
     indTemp2 = name.indexOf("1"); 

     if (ind > -1) { 
      System.out.println(" period"); 
      ind = ind + 1; 
      flag = true; 
     } 
     if(flag == false) { 
      if(indTemp2 > indTemp){ 
       ind = indTemp2 -1; 
       System.out.println(" 1"); 
      } 
      if (indTemp > indTemp2){ 
       ind = indTemp - 1; 
       System.out.println(" 2"); 
      } 
     } 
     flag = false; 
    */ 
     // name = name.substring(0,ind); 

     lines.add(line); 
    } 
    bufferedReader.close(); 
    return lines.toArray(new String[lines.size()]); 
} 
+0

這是一個非常混亂的輸入文件。每張唱片後是否有換行符,還是僅僅是一個平面的轉儲? – warwickf

+0

換行符,對不起,有人爲我修復它,我是全新的網站。 – javauserrrr

+0

有什麼方法可以重新格式化輸入文件嗎? – warwickf

回答

0

好了,那麼唯一的另一種方式是通過走行線,併爲每個不同的線格式的規則列表。有一些重複,但有很多行與其他行非常不同。然後,您會像循環一樣查找規則指針,以便您可以將該規則應用於該行。

據我所見,這是做到這一點的最佳方式。我有這些文件的經驗,如果處理不當,它們可能是一場噩夢。在遵守規則的同時,您實際上可能會找到一種可以使用的模式,這種情況經常發生。

我希望這會有所幫助。