Java에서 문자열을 "문자"배열로 변환


108

StringCharacter 클래스 의 개체 배열 로 변환하고 싶지만 변환 을 수행 할 수 없습니다. toCharArray()메서드 를 사용하여 String을 원시 데이터 유형 "char"의 배열로 변환 할 수 있지만 String을 Character 유형 의 개체 배열로 변환하는 데 도움이되지 않습니다 .

그렇게하려면 어떻게해야합니까?


6
"문자 배열에 맞지 않음"이란 무엇을 의미합니까?
barsju

이것을 다시 말하거나 조금 더 설명하거나 코드 예제를 제공 할 수 있습니까?
blackcompe

변환하려면 charCharacter사용 Character.valueOf(mychar). 배열이면 각 요소를 반복하고 변환하십시오.
ee.

자바에는지도 함수, 람다식이 필요합니다.
Eric Hartford

답변:


184

이것을 사용하십시오 :

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);

27
ArrayUtils가 JVM에서 표준이기를 바랍니다!
Alvin

4
ArrayUtils출신 commons-lang권리, JDK하지?
Eric Wang

66

한 라이너 :

String str = "testString";

//[t, e, s, t, S, t, r, i, n, g]
Character[] charObjectArray = 
    str.chars().mapToObj(c -> (char)c).toArray(Character[]::new); 

그것이하는 일은 :

  • IntStream문자를 가져옵니다 (를 볼 수도 있습니다 codePoints()).
  • 각각의 '문자'값 매핑 Character(그 정말 말할 실제로 캐스팅 할 필요를 char하고 자바가 자동으로 상자됩니다 Character)
  • 호출하여 결과 배열을 가져옵니다. toArray()

33

직접 작은 방법을 작성하지 않겠습니까?

public Character[] toCharacterArray( String s ) {

   if ( s == null ) {
     return null;
   }

   int len = s.length();
   Character[] array = new Character[len];
   for (int i = 0; i < len ; i++) {
      /* 
      Character(char) is deprecated since Java SE 9 & JDK 9
      Link: https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html
      array[i] = new Character(s.charAt(i));
      */
      array[i] = s.charAt(i);
   }

   return array;
}

큰 문자열 인 경우 너무 많은 문자 개체가 인스턴스화됩니다.
realPK

2
간단한 방법을 직접 작성하지 않겠습니까? 메서드가 이미 존재하고 (toCharArray ()) 이미 존재하는 메서드에는 스택 오버플로 게시물에서 복사 / 붙여 넣기 할 수있는 것보다 해당 함수의 성능과 안정성을 보장하는 데 훨씬 더 많은 엔지니어가 전념하고 관심이 있기 때문입니다.
HoldOffHunger

1
@HoldOffHunger 당신이 절대적으로 옳습니다. 그러나 toCharArray ()는 OP의 필요에 따라 Character 객체 대신 기본 유형의 배열을 반환합니다. 물론, char []를 다시 반복하여 Character []로 변환 할 수 있습니다. 그러나 Character 개체를 만드는 문자열 광고를 반복하는 것은 너무 간단합니다. 타사 라이브러리를 가져오고 싶지 않은 경우 직접 롤링하지 않는 이유를 알 수 없습니다.
Alvin

6

아래 코드가 도움이되기를 바랍니다.

String s="Welcome to Java Programming";
char arr[]=s.toCharArray();
for(int i=0;i<arr.length;i++){
    System.out.println("Data at ["+i+"]="+arr[i]);
}

작동하고 출력은 다음과 같습니다.

Data at [0]=W
Data at [1]=e
Data at [2]=l
Data at [3]=c
Data at [4]=o
Data at [5]=m
Data at [6]=e
Data at [7]= 
Data at [8]=t
Data at [9]=o
Data at [10]= 
Data at [11]=J
Data at [12]=a
Data at [13]=v
Data at [14]=a
Data at [15]= 
Data at [16]=P
Data at [17]=r
Data at [18]=o
Data at [19]=g
Data at [20]=r
Data at [21]=a
Data at [22]=m
Data at [23]=m
Data at [24]=i
Data at [25]=n
Data at [26]=g

4
이것은 OP가 요구 한 것이 전혀 아닙니다.
Qix-MONICA는

3

String#toCharArray의 배열을 반환하고 char, 가지고있는 것은의 배열입니다 Character. 대부분의 경우 그것은 당신이 사용하는 경우 중요하지 않습니다 char또는 Character거기로 오토 박싱 . 귀하의 경우 문제는 배열이 자동 박싱되지 않는다는 것 char[]입니다. char ( ) 배열을 사용하는 것이 좋습니다 .


2

이 경우 자신 만의 방법을 작성해야합니다. 루프를 사용하여 각 문자를 취득 charAt(i)하고로 설정 Character[]하여 배열 arrayname[i] = string.charAt[i].


2

이 메서드는 문자열을 인수로 사용하고 문자 배열을 반환합니다.

/**
 * @param sourceString
 *            :String as argument
 * @return CharcterArray
 */
public static Character[] toCharacterArray(String sourceString) {
    char[] charArrays = new char[sourceString.length()];
    charArrays = sourceString.toCharArray();
    Character[] characterArray = new Character[charArrays.length];
    for (int i = 0; i < charArrays.length; i++) {
        characterArray[i] = charArrays[i];
    }
    return characterArray;
}

1

그것을하는 다른 방법.

String str="I am a good boy";
    char[] chars=str.toCharArray();

    Character[] characters=new Character[chars.length];
    for (int i = 0; i < chars.length; i++) {
        characters[i]=chars[i];
        System.out.println(chars[i]);
    }

1

문자열을 문자 배열로 변환 한 다음 문자 배열을 다시 문자열로 변환

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It's an inbuild method of a String)
   char[] characterArray = given.toCharArray();
   //returns = [a, s, d, c, b, s, d, c, a, g, f, s, d, b, g, d, f, a, n, f, g, h, b, s, f, d, a, b]

// ONE WAY : 문자 배열을 문자열로 다시 변환

  int length = Arrays.toString(characterArray).replaceAll("[, ]","").length();

  //First Way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").substring(1,length-1)
  //returns asdcbsdcagfsdbgdfanfghbsfdab
  or 
  // Second way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").replace("[","").replace("]",""))
 //returns asdcbsdcagfsdbgdfanfghbsfdab

// 두 번째 방법 : 문자 배열을 문자열로 다시 변환

String.valueOf(characterArray);

// 세 번째 방법 : 문자 배열을 문자열로 다시 변환

Arrays.stream(characterArray)
           .mapToObj(i -> (char)i)
           .collect(Collectors.joining());

문자열을 문자형 배열로 변환

Character[] charObjectArray =
                           givenString.chars().
                               mapToObj(c -> (char)c).
                               toArray(Character[]::new);

char 배열을 문자 배열로 변환

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

char 배열을 문자 배열로 변환하면 Arrays.stream 기능을 사용하여 하위 배열을 얻을 수 있습니다.

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());

0

JTextField로 작업하는 경우 도움이 될 수 있습니다 ..

public JTextField display;
String number=e.getActionCommand();

display.setText(display.getText()+number);

ch=number.toCharArray();
for( int i=0; i<ch.length; i++)
    System.out.println("in array a1= "+ch[i]);

0

체이닝은 항상 최선입니다 : D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());

1
chaining is always best그릇된.
Qix-MONICA는

1
ArrayUtils는 JDK의 일부가 아닙니다.
mbmast

0

타사 API에 의존하지 않으려면 다음은 JDK7 이하의 작업 코드입니다. 위의 다른 솔루션에서 수행 한 것처럼 임시 문자 개체를 인스턴스화하지 않습니다. foreach 루프는 더 읽기 쉽습니다.

public static Character[] convertStringToCharacterArray(String str) {
    if (str == null || str.isEmpty()) {
        return null;
    }
    char[] c = str.toCharArray();
    final int len = c.length;
    int counter = 0;
    final Character[] result = new Character[len];
    while (len > counter) {
        for (char ch : c) {
            result[counter++] = ch;
        }
    }
    return result;
}

0

java.io 에서 StringReader 클래스를 사용했습니다 . 그것의 함수 중 하나는 문자열의 내용을 배열로 읽습니다.read(char[] cbuf)

String str = "hello";
char[] array = new char[str.length()];
StringReader read = new StringReader(str);

try {
    read.read(array); //Reads string into the array. Throws IOException
} catch (IOException e) {
    e.printStackTrace();
}

for (int i = 0; i < str.length(); i++) {
        System.out.println("array["+i+"] = "+array[i]);
}

이를 실행하면 출력이 제공됩니다.

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.