문자열을 문자열 배열로 분할


113

문자열을 단일 문자 문자열의 배열로 분할해야합니다.

예를 들어, "cat"을 분할하면 "c", "a", "t"가 배열됩니다.



3
빠른 참조로 "".join ([ "c", "a", "t"])를 사용하여 "cat"을 되 찾으십시오.
shuva


Java 8 : .split("")그렇게됩니다.
Amr Lotfy

답변:


120
"cat".split("(?!^)")

이것은 생산할 것입니다

배열 [ "c", "a", "t"]


8
어떻게 그리고 왜? 이것은 어떤 문자를 의미하는 정규식입니까? 내 생각에는 분할이 작동하는 방식으로 실제 문자 (,?,!, ^ 및)로만 분할되어야하기 때문입니다. 그러나 그것은 당신이 말하는대로 작동합니다.
Ty_ 2014 년

3
이것은 실제로 부정적 예견이라고하는 정규식입니다. 여기에서 문서를 확인하세요. docs.oracle.com/javase/6/docs/api/java/util/regex/…
Erwin

4
@ EW-CodeMonkey (?!... )는 부정적 주장에 대한 정규식 구문입니다. 내부 내용과 일치하는 항목이 없다고 주장합니다. 그리고 ^문자열의 시작 과 일치하므로 정규식 은 문자열의 시작 이 아닌 모든 위치에서 일치 하고 분할을 삽입합니다. 이 정규식은 문자열의 끝과 일치 그래서 또한 것을 제외하고, 결과에 빈 문자열을 추가 할 String.split문서를 말한다 "후행 빈 문자열이 결과 배열에 포함되지 않습니다."
Boann 2015

8
Java 8에서는의 동작 String.split이 약간 변경되어 너비가 0 인 일치에 의해 생성 된 선행 빈 문자열도 결과 배열에 포함 (?!^)되지 않으므로 위치가 문자열의 시작이 아니라는 주장이 불필요 해져 정규식이 다음을 수행 할 수 있습니다. 아무것도 단순화하지 마십시오. "cat".split("")그러나 Java 7 이하에서는 결과 배열에 선행 빈 문자열이 생성됩니다.
Boann 2015

1
전체 문자열의 배열을 만듭니다.
Eduard

109
"cat".toCharArray()

하지만 문자열이 필요한 경우

"cat".split("")

편집 : 빈 첫 번째 값을 반환합니다.


12
"cat".split ( "")는 [, c, a, t], no? 어레이에 추가 캐릭터가
reef

4
"cat".split ( "")은 Matt가 예상 한대로 작동하지 않습니다. 추가로 빈 String => [, c, a, t]를 얻게됩니다.
암초

5
이 답변은 Java 8을 사용하는 경우 작동합니다
.

4
내가 split ( "")에 의존하고이 어리석은 빈 첫 번째 인덱스의 원인을 해결하기 때문에 이것은 jdk8의 끔찍한 변경이었습니다. 이제 java8로 업그레이드 한 후 몇 년 전에 예상했던대로 작동합니다. 불행히도 이제 내 해결 방법이 내 코드를 깨뜨립니다. ggrrrr.
Marc

@Marc .toCharArray()어쨌든 사용 하고 있어야 합니다. 정규식을 피하고 char기본 배열을 반환 하므로 더 빠르고 가볍습니다. 1 자 문자열 배열이 필요한 것은 이상합니다 .
Boann 2015

41
String str = "cat";
char[] cArray = str.toCharArray();

3
Nitpicking, 원래 질문은 Char 배열이 아닌 String 배열을 요청합니다. 그러나 여기에서 String 배열을 얻는 것은 매우 쉽습니다.
dsolimano 2011 년

예, 나는 이미 문자 배열을 얻는 방법을 알고 있습니다. 다른 방법이 없다면 char 배열을 반복하고 각 배열에서 문자열을 만들 수 있습니다.
Matt

어떻게 cArray다시 변환 String하시겠습니까?
Bitmap

올바른 구문은 다음과 같습니다. char [] cArray = str.ToCharArray ();
dbz

6

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]);

2

문자열을 한 문자 문자열의 배열로 바꾸는 효율적인 방법은 다음과 같습니다.

String[] res = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
    res[i] = Character.toString(str.charAt(i));
}

그러나 이것은 chara 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복사 해야 하기 때문 입니다.


2

다른 답변을 요약하면 ...

이것은 모든 Java 버전에서 작동합니다.

"cat".split("(?!^)")

이것은 Java 8 이상에서만 작동합니다.

"cat".split("")

0

아마도 String 내용을 통과하는 for 루프를 사용하고 charAt메서드를 사용하여 문자별로 문자를 추출 할 수 있습니다 .

ArrayList<String>예를 들어와 결합 하면 개별 문자 배열을 얻을 수 있습니다.


한쪽 다리로 서서 "God Save the Queen"을 부를 수도 있습니다. 미안하지만 이건 정답이 아닙니다.
Stephen C

0
for(int i=0;i<str.length();i++)
{
System.out.println(str.charAt(i));
}

1
이것이 문자열을 배열로 분할 할 것이라고 확신합니까? 화면에 문자열을 인쇄하고 있습니다.
TDG

0

원래 문자열이 포함되어있는 경우 보조 유니 코드 문자 , 다음 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);
}

0

split("(?!^)")문자열에 서로 게이트 쌍이 포함 된 경우 제대로 작동하지 않습니다. 당신은 사용해야합니다 split("(?<=.)").

String[] splitted = "花ab🌹🌺🌷".split("(?<=.)");
System.out.println(Arrays.toString(splitted));

산출:

[花, a, b, 🌹, 🌺, 🌷]

0

확산 연산자 [ ...]는 문자열에 각 문자가있는 배열을 만듭니다.

const cat= 'cat';
const arrayized = [...cat] // ['c', 'a', 't'];

console.log(arrayized);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.