2014-02-24 2 views
0

본질적으로 내가하고 싶은 일은 텍스트 파일에서 한 줄씩 읽어서 다음과 같이 형식을 지정합니다. 성/직위/중간/출생/사망일 (MM/DD/YYYY)자바에서 문자열의 이름과 날짜를 포맷/분리 하시겠습니까?

나는이 같은 날짜에 읽기 :이 같은

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

와 이름 :

Last, Title First Middle (comma after name needed) 

또는

나는 정말 오랜 시간 동안이 일을 해왔으며 그걸 알아 채지 못했습니다. 아래는 이것을 이해하기위한 절망적 인 시도에서 많은 변화를 겪은 나의 꽤 지저분한 코드이다. 나를 도와 주려는 누군가 (나는 학생이다.) 여기에 읽혀진 이름의 예도있다. 지역 :

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

좋아, 그래서 그 유일한 방법은 선으로 선을 가서 각각 다른 줄 형식에 대한 규칙 목록을 만들 수 있습니다. 몇 가지 중복이 있지만 다른 행과 다른 행이 많이 있습니다. 그런 다음 줄을 반복하면서 규칙 포인터를 찾아 해당 규칙을 줄에 적용 할 수 있습니다.

제가 알 수있는 한, 이것이 최선의 방법입니다. 이 파일들에 대한 경험이 있었고 제대로 처리하지 않으면 악몽이 될 수 있습니다. 규칙을 진행하면서 실제로 사용할 수있는 패턴을 찾을 수 있습니다.

이 정보가 도움이되기를 바랍니다.