2015-01-09 3 views
0

나는 '|' 2 열이 CSV 파일을 구분 :숫자 문자열에 자바 String.split()

A |B 
87657|5 
87688|8 
32134|4 
... 

내가 (int)로,이 파일을 읽고 문자열로 열 A의 값을 가지고, 및 열 B 값으로지도를 만들고 싶어.

내가 할 (와 구분 = "|") :

1:2 
8:5 
9:3 
... 
:

Map<String, Integer> output = new HashMap<>(); 
    assert delimiter.length() == 1; 
    int count = 0; 
    for(String line: Files.readAllLines(Paths.get(docidFreq), Charset.defaultCharset())) { 
     count++; 
     //skipping header row 
     if (count == 1) { 
      continue; 
     } 
     String tokens[] = line.split(delimiter); 
     output.put(tokens[0], Integer.parseInt(tokens[1])); 
    } 
    return output; 

그러나,지도 (위의 샘플 파일 행 전혀 관련)과 같은 하나의 숫자 키와 값을 포함

내가 뭘 잘못하고 있니?

+2

'구분 기호'가 무엇인지 표시해야합니다 .. –

+0

@RC 죄송합니다. 구분 기호는 문자열 "|"입니다. –

답변

9

기호 '|' 아래 에서처럼 두 개의 '\'를 사용하여 이스케이프 처리해야합니다.

split("\\|"); 
+0

또는'split ("[|]");' –

0

에게 당신은 같은 작업을 수행 할 수 있습니다

StringTokenizer st = new StringTokenizer (line, "\\|"); 
map.put(st.nextToken(), Integer.parseInt(st.nextToken())); 
0

시도 같은 :

String line = "87657|5";//line from a file 
Map<String, Integer> map = new HashMap<String, Integer>(); 
String[] numbers = line.split("\\|");//assuming you have entries in file like "num1|num2" 
map.put(numbers[0], Integer.parseInt(numbers[1])); 
System.out.print(map); 

Output: 
{87657=5} 
0

당신이 중 하나를 사용할 수있는 다음과 같은 방법 :

String[] str = line.split("\ \|"); 

또는

,
StringTokenizer st = new StringTokenizer (line, "\ \|"); 

split() 매우 사용하기 쉬운 반면 StringTokenizerString.split() 방법보다 훨씬 빠릅니다.

관련 문제