2017-11-29 6 views
2

특정 길이 뒤에 문자열을 분할하고 싶습니다.Java에서 다른 길이의 문자열 분할

의 우리가

123456789 

분할과 같은 "메시지"의 문자열 있다고 가정 해 봅시다 : 첫째

"(?<=\\G.{2})" 

정규 표현식과를 사용하여 I 2로 분할 생각

"12" "34" "567" "89" 

을 마지막 두 개에 가입하고 다시 세 개로 분할하지만 RegExp를 사용하여 한 번에 그 작업을 수행 할 수있는 방법이 있습니다. 제발 도와주세요

+1

길이 2, 4 및 7로 분할하고 싶습니까? –

+0

다른 길이에 대해서는 정규식에 대해 알지 못하지만 루프 내에서 부분 문자열을 사용하여이를 수행 할 수 있습니다. –

+1

은 2,2,3,2,2,3 ....와 같은 길이의 패턴이 있습니까 ?? –

답변

4

사용 ^(.{2})(.{2})(.{3})(.{2}).* 그룹에 지정된 길이로 문자열을 (regex101에서 직접보기) 별도의 문자열로

String input = "123456789"; 
    List<String> output = new ArrayList<>(); 

    Pattern pattern = Pattern.compile("^(.{2})(.{2})(.{3})(.{2}).*"); 
    Matcher matcher = pattern.matcher(input); 

    if (matcher.matches()) { 
    for (int i = 1; i <= matcher.groupCount(); i++) { 
     output.add(matcher.group(i)); 
    } 
    } 

    System.out.println(output); 

주 그룹을 잡아 : 그룹 캡쳐가 부터 1으로 시작됩니다. 그룹 0은 전체 문자열

그리고 여기에 마법이 replaceAll() 방법으로 캡처 그룹을 대체 할 수있다 뭐죠 코멘트

String pattern = "^(.{2})(.{2})(.{3})(.{2}).*"; 
    String[] vals = "123456789".replaceAll(pattern, "$1-$2-$3-$4").split("-"); 

에서 @YCF_L에서 놀라운 솜씨의 마법과 일치합니다. 캡처 된 하위 시퀀스을 참조하려면 $ n (여기서 n은 숫자)을 사용하십시오. 더 자세한 설명은이 stackoverflow question을 참조하십시오.

참고 : 여기서 입력 문자열에 -이 들어 있다고 가정합니다. 그렇다면 을 입력하고 입력 문자열에없는 다른 문자를 찾아 구분 기호로 사용할 수 있습니다.

+0

대답 해 주셔서 감사합니다. – Srikar

+0

고마워요. – Srikar

+2

당신은 마법사입니다 @ YCF_L : 당신에게 경의를 표합니다! –

2

regex101123456789 테스트 문자열에서이 정규식을 테스트하십시오.

^(\d{2})(\d{2})(\d{3})(\d{2})$ 

출력 :

Match 1 
Full match 0-9 `123456789` 
Group 1. 0-2 `12` 
Group 2. 2-4 `34` 
Group 3. 4-7 `567` 
Group 4. 7-9 `89`