문자열을 단일 문자 문자열의 배열로 분할해야합니다.
예를 들어, "cat"을 분할하면 "c", "a", "t"가 배열됩니다.
.split("")
그렇게됩니다.
문자열을 단일 문자 문자열의 배열로 분할해야합니다.
예를 들어, "cat"을 분할하면 "c", "a", "t"가 배열됩니다.
.split("")
그렇게됩니다.
답변:
"cat".split("(?!^)")
이것은 생산할 것입니다
배열 [ "c", "a", "t"]
(?!
... )
는 부정적 주장에 대한 정규식 구문입니다. 내부 내용과 일치하는 항목이 없다고 주장합니다. 그리고 ^
문자열의 시작 과 일치하므로 정규식 은 문자열의 시작 이 아닌 모든 위치에서 일치 하고 분할을 삽입합니다. 이 정규식은 문자열의 끝과 일치 그래서 또한 것을 제외하고, 결과에 빈 문자열을 추가 할 String.split
문서를 말한다 "후행 빈 문자열이 결과 배열에 포함되지 않습니다."
String.split
이 약간 변경되어 너비가 0 인 일치에 의해 생성 된 선행 빈 문자열도 결과 배열에 포함 (?!^)
되지 않으므로 위치가 문자열의 시작이 아니라는 주장이 불필요 해져 정규식이 다음을 수행 할 수 있습니다. 아무것도 단순화하지 마십시오. "cat".split("")
그러나 Java 7 이하에서는 결과 배열에 선행 빈 문자열이 생성됩니다.
"cat".toCharArray()
하지만 문자열이 필요한 경우
"cat".split("")
편집 : 빈 첫 번째 값을 반환합니다.
.toCharArray()
어쨌든 사용 하고 있어야 합니다. 정규식을 피하고 char
기본 배열을 반환 하므로 더 빠르고 가볍습니다. 1 자 문자열 배열이 필요한 것은 이상합니다 .
String str = "cat";
char[] cArray = str.toCharArray();
cArray
다시 변환 String
하시겠습니까?
Basic Multilingual Plane 이외의 문자 가 입력에 예상되는 경우 (일부 CJK 문자, 새로운 이모티콘 ...), 다음과 같은 접근 방식은 "a💫b".split("(?!^)")
사용할 수 없습니다 array ["a", "?", "?", "b"]
.
"a💫b".codePoints()
.mapToObj(cp -> new String(Character.toChars(cp)))
.toArray(size -> new String[size]);
문자열을 한 문자 문자열의 배열로 바꾸는 효율적인 방법은 다음과 같습니다.
String[] res = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
res[i] = Character.toString(str.charAt(i));
}
그러나 이것은 char
a String
가 실제로 유니 코드 코드 포인트의 절반을 나타낼 수 있다는 사실을 고려하지 않습니다 . (코드 포인트가 BMP에없는 경우)이를 처리하려면 코드 포인트를 반복해야합니다. 더 복잡합니다.
이 접근 방식 String.split(/* clever regex*/)
은를 사용하는 것보다 빠르며 Java 8 이상 스트림을 사용하는 것보다 빠를 것입니다. 이보다 빠를 가능성이 있습니다.
String[] res = new String[str.length()];
int 0 = 0;
for (char ch: str.toCharArray[]) {
res[i++] = Character.toString(ch);
}
문자를 새 배열 toCharArray
로 복사 해야 하기 때문 입니다.
원래 문자열이 포함되어있는 경우 보조 유니 코드 문자 , 다음 split()
것없는 일을, 그것은 서로 게이트 쌍에 이러한 문자를 분할한다. 이러한 특수 문자를 올바르게 처리하려면 다음과 같은 코드가 작동합니다.
String[] chars = new String[stringToSplit.codePointCount(0, stringToSplit.length())];
for (int i = 0, j = 0; i < stringToSplit.length(); j++) {
int cp = stringToSplit.codePointAt(i);
char c[] = Character.toChars(cp);
chars[j] = new String(c);
i += Character.charCount(cp);
}