2013-04-12 7 views
1

나는 ","구분 기호로 내 csv를 분할하기 위해 scanner.delimiter를 사용하고 있습니다. 그러나 저는 "Monsters, Inc."와 같은 데이터에 쉼표가 포함 된 데이터가 있습니다.Java에서 CSV 데이터의 쉼표를 처리하는 방법

그러나 구분 기호를 "\", \ ""로 설정하면 다른 모든 항목에서 충돌이 발생합니다.

내 자신의 scanner.delimiter 방법을 쓰지 않아도되는 아이디어?

+1

많은 기존의 CSV 파서 lib 디렉토리가 있습니다. 하나를 사용해야합니다. –

+0

가능한 복제본 [String.split()을 사용하여 텍스트 구분 기호로 따옴표로 csv 파일 나누기] (http://stackoverflow.com/questions/15738918/splitting-a-csv-file-with-quotes-as-text -delimiter-using-string-split) –

답변

1

나는이 문제에 대해 scanner.delimiter가 작동하지 않는다고 생각합니다. 여분의 혼수 상태가있는 데이터에 따옴표가있는 경우 유사 답변/질문에서 언급 한 것처럼 String.split을 사용하여 이러한 종류의 문제를 해결하기 위해 정규 표현식이나 코드를 사용할 수 있습니다. 견적이 없으면 할 수있는 일이 정말로 없습니다.

비슷한 예제가 stackoverflow에 있습니다. 예를 들어 나는이 일이 당신에게 적용 생각 :

Splitting a csv file with quotes as text-delimiter using String.split()

사용자 지정 코드를 사용하여 분할

public static void main(String[] args) { 
    String s = "Sachin,,M,\"Maths,Science,English\",Need to improve in these subjects."; 
    String[] splitted = s.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); 
    System.out.println(Arrays.toString(splitted)); 
} 

사용

public static ArrayList<String> customSplitSpecific(String s) 
{ 
    ArrayList<String> words = new ArrayList<String>(); 
    boolean notInsideComma = true; 
    int start =0, end=0; 
    for(int i=0; i<s.length()-1; i++) 
    { 
     if(s.charAt(i)==',' && notInsideComma) 
     { 
      words.add(s.substring(start,i)); 
      start = i+1;     
     } 
     else if(s.charAt(i)=='"') 
     notInsideComma=!notInsideComma; 
    } 
    words.add(s.substring(start)); 
    return words; 
} 
+0

다른 질문의 대답을 복사하지 말고 주석을 달아 복제본임을 나타냅니다. –

+0

고마워, 그냥 그랬어! –

관련 문제