2011-09-23 5 views
-2

문자열을 N 개의 2char 문자열로 분할하고 싶습니다. String.subSequence를 사용해야한다는 것을 알고 있습니다. 그러나 나는 그것이 문자열까지이를 만드는 유지하려는 것은> 2문자열을 N 개의 문자열로 나눕니다.

+4

정교한? 예? –

+0

무슨 일이 일어 났습니까? 누군가가 방금 나간 벡터를 사용하여 내 문제에 대한 extact 답변을 게시했습니다. 누군가 설명 할 수 있습니까? – Will

+0

아마도 포스터가 대답을 삭제하고 읽었으며 컴파일하지 못했습니다. – ilcavero

답변

3

이 시도입니다 :

int n = 3; 
String s = "abcdefghijkl"; 

System.out.println(Arrays.toString(s.split("(?<=\\G.{2})(?=.)", n + 1))); 

//prints: [ab, cd, ef, ghijkl], i.e. you have 3 2-char groups and the rest 

다음과 같이 정규식 작동 : 2 개 문자 ((?<=...) 뒤에 제로 폭에 postive보기) 시작 후 어떤 위치를 찾을 수 마지막 일치 위치 (\G)에서 적어도 하나 이상의 문자 (너비가 0 인 긍정적 인 모양이 앞에 (?=.)) 앞에 있어야합니다. 이것은 문자열의 시작과 끝의 위치와 일치해서는 안되며 따라서 n은 원하는만큼 클 수 있습니다. 시작 또는 끝에서 빈 문자열이 나오지 않습니다.

편집 : 최대한 분할하려면 분할 할 두 번째 매개 변수를 생략하십시오.

예 :

String digits = "123456789"; 

System.out.println(Arrays.toString(digits.split("(?<=\\G.{2})(?=.)"))); //no second parameter 

//prints: [12, 34, 56, 78, 9] 
+0

좋은 제안이지만 n = s.length()/2로이 예제가 필요하다고 생각합니다. – ashiaka

+0

@ashiaka 제약이 없으면'split()'의 두 번째 매개 변수를 생략해야합니다. 그렇게하면 분할이 가능한 한 자주 수행됩니다. 예제를 추가하겠습니다. – Thomas

+0

아주 멋진 코드입니다. 내 정규식을 닦고 싶습니다 :) 건배 Thomas – Will

1
String s = "asdasdasd"; 
List<String> segments = new ArrayList<String>(); 
for (int i = 1; i < s.length(); i=i+2) { 
    segments.add(s.substring(i-1, i+1)); 
} 
System.out.println(segments.toString()); 
관련 문제