사용 ^(.{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을 참조하십시오.
참고 : 여기서 입력 문자열에 -
이 들어 있다고 가정합니다. 그렇다면 을 입력하고 입력 문자열에없는 다른 문자를 찾아 구분 기호로 사용할 수 있습니다.
길이 2, 4 및 7로 분할하고 싶습니까? –
다른 길이에 대해서는 정규식에 대해 알지 못하지만 루프 내에서 부분 문자열을 사용하여이를 수행 할 수 있습니다. –
은 2,2,3,2,2,3 ....와 같은 길이의 패턴이 있습니까 ?? –