2012-10-14 3 views
2

분열 문자열 (자바)에 대한 :정규식 내가처럼 보이는 하나의 문자열이

6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0 
4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0 

과 같은 두 개의 서로 다른 문자열로 분할하고 싶습니다 :

6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0 

다른 문자열 being :

4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0 

정규식을 사용하면됩니까? 아니면 더 좋은 방법이 있습니까? 참고 : 떨어져 6과 4에서 다른 번호는 항상있을 것입니다 1 또는 0

+0

문자열은 어떻게 받습니까? 파일 에서요? –

+0

문자열을 한 줄씩 반복 할 수 있으며 한 문자로 된 문자열을 볼 때마다 새 블록을 시작할 수 있습니다. –

+0

텍스트 파일 BufferedReader (new FileReader ("file.txt")) – meanrims

답변

4

당신은 줄 바꿈에 분할하기를 원하지만 경우에만 다음 문자 (들)는 숫자와 개행 문자입니다.
이 정규식을 시도해보십시오

"\n(?=\\d+\\n)" 

그것은 위에서 언급 한 조건을 주장하는 look ahead를 사용합니다.

public static void main(String[] args) { 
    String input = "6\n0 1 1 0 0\n1 1 1 1 0\n0 0 0 1 0\n4\n1 1 0 1 0\n0 0 0 1 0\n1 1 0 1 0\n0 1 1 0 0"; 
    String[] parts = input.split("\n(?=\\d+\\n)"); 
    System.out.println(Arrays.toString(parts)); 
} 

출력 :

[6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0, 4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0] 
+0

고마워, 내가 정규 표현식으로 가능할 것이라고 생각 했어. – meanrims

+0

@ 보헤미안 수 있었다. 이 '("\ n (? = \\ d + \\ n)");을 설명하시오. – exexzian

+0

@sansix 나는 내가 그랬다고 생각했다. 그것은 정규 표현식으로 표현 된 내 대답의 첫 번째 문장입니다. "미리보기"가 무엇인지에 대한 대답에서 (추가 된) 링크를 읽으십시오. – Bohemian

-2

그것은 정규식없이 가능 :

String phrase = 
"6 
0 1 1 0 0 
1 1 1 1 0 
0 0 0 1 0 
4 
1 1 0 1 0 
0 0 0 1 0 
1 1 0 1 0 
0 1 1 0 0"; 

String delims = "[4 6]+"; 

String[] parts= phrase.split(delims); 
+4

-1 제발 ... 이건 절름발이 야. 질문에 대답조차하지 않아. – Bohemian

-1

예는 필요 정규 표현식

는 여기에 몇 가지 테스트 코드입니다. java.util.regex.Pattern.compile("([64][^64]+?)", Pattern.MULTILINE)을 만들고 java.util.regex.Matcher을 만들고 CharSequence를 통해 find()를 시작하면됩니다. group (1)을 찾을 때마다()를 쿼리 할 수 ​​있습니다.

+0

정규식은 가능한 해결책이지만이 경우에는 꼭 필요하지 않다. 간단한 문자열 비교는 동일한 작업을 수행 할 수 있습니다. – bisserlis

1

@ 보헤미안이 대답하는 것처럼 정규식을 사용하여 확실히 할 수 있습니다. 그러나 결과에 대해 다른 처리를 수행하지 않을 경우에만 가능합니다. 분할 문자열을 더 이상 구문 분석해야하고 regex를 다시 사용하면 코드가 복잡해질 수 있습니다. 차라리 문자열을 java.util.Scanner으로 보내고 전체 문자열을 나중에 사용할 수 있도록 좀 더 유용한 데이터 구조 나 클래스 집합으로 파싱하는 것이 좋습니다.

관련 문제