2013-07-23 2 views
0

내가 많이 들어있는 파일을 "##,##"으로 가져 오려고합니다. 각 번호는 한 자리 또는 두 자리 수 있습니다.java String.split (정규식) 디자인

인접한 따옴표없이 두 숫자를 얻으려면 String.split(regex)을 사용하고 싶습니다.

첫 번째와 마지막 문자를 잘라내서 비 정규식 분할을 사용할 수 있다는 것을 이해하면보다 정규화 된 정규 표현식이 필요합니다.

제안 사항?

편집 :

In: "12,3" 
Out: 12 
     3 
+1

"_non-regex split_"은 무엇을 의미합니까? 또한 입/출력 예제를 제공 할 수 있습니까? ''12,34 "는'12,34' 또는'12'와'34'가되어야합니까? – jlordo

+0

String.split (",")을 사용하면 두 개의 반쪽을 얻습니다. 각각은 그것에 작은 따옴표가 ... 확인 - 진정한 "아닌 - 정규식"하지만 진짜로 정규식의 힘을 사용하지 ... – ethrbunny

답변

7

정규 표현식 \"(d+),(d+)\"을 사용하는 것은 어떻습니까? 그런 다음 String.split 대신 Pattern.matcher(input)을 사용하고 Matcher.group(int)으로 자릿수를받습니다.

조각 다음 사항을 고려하십시오 :

String toSplit = "\"##,##\""; 
String[] splitted = toSplit.replaceAll("\"", "").split(","); 

"##,##"을 시뮬레이션 할 toSplit 문자열에 \"을 사용하여, 당신은 그때까지 문자열을 분할 각 라인에있는 모든 따옴표에게 문자를 제거 할 수 있습니다

String line = "\"1,31\""; 

Pattern pattern = Pattern.compile("\"(\\d+),(\\d+)\""); 
Matcher matcher = pattern.matcher(line); 
if (matcher.matches()) { 
    int firstNumber = Integer.parseInt(matcher.group(1)); 
    int secondNumber = Integer.parseInt(matcher.group(2)); 
    // do whatever with the numbers 
} 
0

당신은뿐만 아니라 따옴표로 분할 할 수 있지만, 불행하게도 길이 4의 배열 초래에서 다른 문자를 제거 분할 문자열 및 의 방법이 없습니다 하나의 호출에서 동일한 문자열을 String#split을 사용합니다.

대안으로, 당신이 사용할 수있는 아파치의 StringUtils :

String[] n = StringUtils.removeStart(StringUtils.removeEnd("##,##", "\""), "\"").split(","); 

편집 : 입력 문자열의 시작 또는 끝 부분에 따옴표를 누락 수있는 것 StringUtils를 사용하여 보조 노트, 등. 그들이 항상 존재한다고 확신한다면, 단순한 substring(...)으로 충분할 것입니다. (크레디트는 @Ingo로 이동)

+0

당신은 부분 문자열 1을 너무 분할 할 수 있습니다 1 – Ingo

+0

@Ingo는 하위 문자열을 의미합니까 ? 당신은 정교 할 수 있습니까? – Thomas

+0

그것은 명백해야합니다, 그렇지 않아야합니까? 따옴표 때문에 "xx, xx"를 나눌 수 없다면 하위 문자열 xx, xx를 나눌 수 있습니다 – Ingo