char 배열을 문자열로 다시 변환하는 방법은 무엇입니까?


405

char 배열이 있습니다.

char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};

내 현재 솔루션은

String b = new String(a);

그러나 분명히 이것을하는 더 좋은 방법이 있습니까?


151
더 좋은 방법이 있다고 생각하는 이유는 무엇입니까? 셜리라고 부르지 마 :)
호버 크래프트 가득한 뱀장어

항상 위와 같은 새로운 변수를 만드는 것은 런타임 동안 약간의 오버 헤드를 갖도록 연관시키기 때문입니다. 예를 들어 char 배열을 문자열로 for 루프로 변환하기 위해 위의 행을 넣는 것처럼, 나에게는 그것이 올바르게 보이지 않습니다. 그리고 네, 저는 완벽 주의자입니다. . .
chutsu

1
char []의 배열 또는 컬렉션을 말하면 이러한 배열이 많으면 char 배열을 StringBuffer에 추가하지만 여기 또는 거기에있는 문자열의 경우 가장 많이 사용하는 것이 게시됩니다.
호버크라프트 가득한 뱀장어

char [] 복사를 피하는 방법을 찾고 있다면 없습니다. 그렇지 않으면 String의 불변성을 파괴 할 수 있습니다.
Paul Cager

13
"새 변수 만들기"는 오버 헤드가 발생하지 않습니다. 변수는 값을 나타내는 데 사용되는 이름이며, 이름 자체는 런타임에 메모리의 어느 곳에도 존재하지 않습니다 (적어도 리플렉션이 상당히 제한되는 Java와 같은 언어는 아님). "오버 헤드"는 새로운 가치를 창출 하는 데서 비롯되며 , 문제가 "이 가치를 구성하는 것"이라는 점을 고려하면 귀하의 경우에는 그와 다른 방법이 없습니다. char 배열이 마술처럼 문자열로 변형되도록 할 수는 없습니다. 문자열이 작성된 후 원래 문자 배열이 가비지 수집되도록 정렬 있습니다 .
Karl Knechtel

답변:


212

아니요, 해당 솔루션은 절대적으로 정확하고 매우 적습니다.

그러나 이것은 매우 드문 상황입니다. StringJava에서 특별히 처리 되기 때문에 "foo"실제로는 String. 따라서 char일반 코드 에서는 문자열을 개별으로 분할 하고 다시 결합 할 필요가 없습니다.

C / C ++와 비교해 "foo"당신의 번들이 char한쪽에와 0 바이트로 종료의 string그들 사이의 다른 측면에 많은 변환으로 인해 할 기존의 방법을.


146

String text = String.copyValueOf(data);

또는

String text = String.valueOf(data);

논란의 여지없이 더 좋습니다 ( new String통화를 캡슐화합니다 ).


6
두 가지 방법 모두 String(char[])또는 그 변형을 호출 합니다. 그리고 복사 부분은 내부에서 수행됩니다 String(char[]). 이것은 다른 valueOf방법들 과의 대칭 외에 직접 호출에 이점이 없다 .
AH

1
적이고 더 많은 OOP 는 용어의 모순입니다. static 으로 선언 된 것은 객체 또는 그 동작의 일부가 아니므로 객체 지향이 아닙니다. 이 외에도-구현이 String호환되지 않는 방식으로 변경 및 / 또는 향상 될 가능성이 있거나 런타임에 여러 경쟁 구현을 선택할 수있는 경우 정적 팩토리 메소드가 의미가 있습니다. 이 같은 낮은 수준의 일이 발생하지 않습니다 String. 그러므로 제 전제는 : 가장 큰 망치가 아닌 가장 작은 망치를 사용하십시오.
AH

@AH 나는 그것에 대해 모른다. String은 StringBuilder로 전달 된 StringBuffer로 전달되었습니다. StringBuffer 지지자들도 똑같은 말을 걸었고 이제 StringBuilder를 사용하기 위해 코드를 리팩터링해야합니다.
corsiKa

1
@AH CharSequence인터페이스 를 만들어야한다는 사실은 "문자열과 같은 낮은 수준의 물건으로는 발생하지 않는다"는 결함을 보여줍니다. 그들은 없을 것입니다.
corsiKa

1
@ corsiKa String API가 모두 훌륭하고 황금색이라고 말하지 않았습니다. 호환되지 않는 방식으로 변경되지 않으며 클래스 자체와 생성자가 아무데도 가지 않을 것입니다. :-)
AH

37

이것은 char 배열을 다시 문자열로 변환합니다 :

char[] charArray = {'a', 'b', 'c'};
String str = String.valueOf(charArray);

14
String str = "wwwwww3333dfevvv";
char[] c = str.toCharArray();

문자 배열을 String으로 변환하는 방법에는 두 가지가 있습니다.

Arrays.toString(c);

문자열을 반환합니다 [w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v].

과:

String.valueOf(c)

문자열을 반환합니다 wwwwww3333dfevvv.

요약하자면Arrays.toString(c) , "[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]"대신에 주의를 기울여야합니다 "wwwwww3333dfevvv".


7

Java의 문자열은 단순히 문자 배열 주위의 객체입니다. 따라서

char[]

동일한 문자를 가진 unboxed String과 동일합니다. 문자 배열에서 새 문자열을 작성하여

new String(char[])

본질적으로 컴파일러에게 문자 배열 주위에 String 객체를 자동 상자 화하도록 지시합니다.



2
package naresh.java;

public class TestDoubleString {

    public static void main(String args[]){
        String str="abbcccddef";    
        char charArray[]=str.toCharArray();
        int len=charArray.length;

        for(int i=0;i<len;i++){
            //if i th one and i+1 th character are same then update the charArray
            try{
                if(charArray[i]==charArray[i+1]){
                    charArray[i]='0';                   
                }}
                catch(Exception e){
                    System.out.println("Exception");
                }
        }//finally printing final character string
        for(int k=0;k<charArray.length;k++){
            if(charArray[k]!='0'){
                System.out.println(charArray[k]);
            }       }
    }
}

이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
baikho

1
 //Given Character Array 
  char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};


    //Converting Character Array to String using String funtion     
    System.out.println(String.valueOf(a));
    //OUTPUT : hello world

Java 8 Stream 함수를 사용하여 지정된 배열 유형을 문자열로 변환

String stringValue = 
Arrays.stream(new char[][]{a}).map(String::valueOf).collect(Collectors.joining());

1

를 사용해보십시오 java.util.Arrays. 이 모듈에는 어레이와 관련하여 사용할 수있는 다양한 유용한 방법이 있습니다.

Arrays.toString(your_array_here[]);


0

아래와 같은 String.value를 사용하십시오.

  private static void h() {

        String helloWorld = "helloWorld";
        System.out.println(helloWorld);

        char [] charArr = helloWorld.toCharArray();

        System.out.println(String.valueOf(charArr));
    }

-3

이 시도:

CharSequence[] charArray = {"a","b","c"};

for (int i = 0; i < charArray.length; i++){
    String str = charArray.toString().join("", charArray[i]);
    System.out.print(str);
}

-4

StringBuilder 클래스를 사용할 수도 있습니다

String b = new StringBuilder(a).toString();

String 또는 StringBuilder의 사용은 메소드 요구 사항에 따라 다릅니다.


왜 그래? 이 작업에서 무엇을 얻습니까?
케이시

-12

대체 방법은 다음과 같습니다.

String b = a + "";

3
toString제대로 작동 한다고 가정하므로 잘못되었습니다 char[]. 특정 벤더 및 JVM 버전에서 작동 할 수 있습니다.
fommil

3
String 클래스는 불변이기 때문에,이 두 가지 작업을 수행하게됩니다 : toString ()에 대한 호출 a또 다른 String 객체와 생성을 그 연접와 a.toString()""
Alpay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.