2014-02-21 2 views
1

문자열을 쉼표, 세미콜론 및/또는 파이프와 같이 사용자가 지정한 문자로 구분할 수 있습니다. 청결 함과 융통성을 위해서 나는 배열 (문자열이나 char 또는 Regex가 무엇이든 관계없이)에서 이러한 delims를 사용하는 것이 이상적입니다.Java - 파이프 구분 기호 ("\ I"), 쉼표로 구분 된 (","), 세미콜론으로 구분 된 (";") 등의 문자열 분할

String[] stringsToSplit = {"alpha,bravo,charlie", "delta;echo;foxtrot", "golf|hotel|india", "juliet\nkilo\nlima"}; 
String[] acceptedNonEscapedDelims = {"," , ";"}; 
String[] acceptedEscapedDelims = {"\\|" , "\\n"}; 

하드 코드 된 Regex를 사용해야 작동합니다.

String[] values = string.split("\\n|\\||\\t|,|;"); 

정규식을 문자열 배열에 저장하는 것에는 다음과 같은 것이 없습니다.

String[] values = string.split(acceptedEscapedDelims[0]); 

나는 개별적으로 하드 코딩 각 하나를 사용하여 가능한 각 구분 및 분할에 대한 부울 플래그를 만들 수 있지만,이 방법은 나에게 해커처럼 보인다. 그런 간단한 일을 위해서, 그것은 또한 사기성으로 피싱합니다. 각각의 분리 문자를 개별적으로 처리한다면 특별한 처리가 필요합니다. 문자열에 쉼표가 포함되는지 여부를 테스트합니다 (쉼표로 분리하기 전에). 그렇지 않으면 단일 문자의 배열 요소가됩니다.

+0

* 질문 1 * 1 개 문자열이 여러 구분 기호를 사용할 수 있습니다 (예 :' "A, B, C | D \ NE 것"이라고'수 유효한 입력이 있다면 5 요소로 분할됩니까?). * 질문 2 * : 데이터에 실제로 쉼표가 포함 된 문자열의 경우 어떻게됩니까? ''달튼, 티모 ','코너리, 션 '; "'? –

+0

'String [] values ​​= string.split (acceptedEscapedDelims [0]);'잘 작동합니다 : https://ideone.com/xLox9T – Keppil

답변

1

한글자로만 나눌 수 있으므로 대신 [abcde] ("하나") 형태로 시도해보십시오. 데모 :

System.out.println(Arrays.toString("a;b.c|d".split("[;.|]")));

출력 :

[a, b, c, d]

+0

이 killer_PL을 이용해 주셔서 감사합니다. 이는 구성 가능성 질문을 직접적으로 다루지는 않습니다. 사용자가 사용할 구분 기호를 동적으로 지정할 수 있어야합니다. 구분 기호를 가져 와서 배열에 저장할 수는 있지만 작동하지 않습니다. delimiter 배열의 구분 기호를 정규식으로 전달하는 방법은 무엇입니까? – Julie

+0

@Julie'StringBuilder'에 의한 단지 concat 구분자. '''또는']'와 같은 문자를 이스케이프 처리하는 것을 기억하십시오 –

+0

'code'String [] regularDelims = { ",", ";"} String [] escapedDelims = { "\\ |", "\ n"}; 문자열 [] stringToSplit = { "알파, 브라보, 찰리", "델타, 에코, 폭스 트롯", "골프 | 호텔 | 인도", "줄리엣 \ nkilo \ { allDelims + = ("| \\"+ DELIM) } : 에 대한 (escapedDelims 문자열 DELIM) | { (""+ DELIM) allDelims + =} : (regularDelims 문자열 DELIM)에 대한 allDelims + = "]";'code' – Julie