[java] 문자를 문자열로 변환하는 방법?

나는 char있고 나는 필요하다 String. 하나에서 다른 것으로 어떻게 변환합니까?



답변

사용할 수 있습니다 Character.toString(char). 이 메소드는 단순히에 대한 호출을 리턴 String.valueOf(char)합니다.

다른 사람들이 지적했듯이 문자열 연결은 바로 가기로도 작동합니다.

String s = "" + 's';

그러나 이것은 다음과 같이 컴파일됩니다.

String s = new StringBuilder().append("").append('s').toString();

때문에 비효율적 인 StringBuildera로 백업 char[](기준 초과 할당 StringBuilder()으로 16) 해당 어레이가 수비를 생성하여 복사 할 String.

String.valueOf(char)char배열을 단일 요소 배열 로 감싸고 이를 패키지 private constructor에 전달하면 “백도어를 가져옵니다” String(char[], boolean).


답변

좋은 질문. 나는 다음과 같은 다섯 가지 6 가지 방법을 가지고 있습니다.

// #1
String stringValueOf = String.valueOf('c'); // most efficient

// #2
String stringValueOfCharArray = String.valueOf(new char[]{x});

// #3
String characterToString = Character.toString('c');

// #4
String characterObjectToString = new Character('c').toString();

// #5
   // Although this method seems very simple, 
   // this is less efficient because the concatenation
   // expands to new StringBuilder().append(x).append("").toString();
String concatBlankString = 'c' + "";

// #6
String fromCharArray = new String(new char[]{x});

참고 : Character.toString (char)String.valueOf (char)를 반환합니다 . 효과적으로 둘 다 동일합니다.

String.valueOf(char[] value)를 호출 new String(char[] value)하면 valuechar 배열이 설정 됩니다.

public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

반면에 String.valueOf(char value)다음 패키지 개인 생성자를 호출합니다 .

String(char[] value, boolean share) {
    // assert share : "unshared not supported";
    this.value = value;
}

에서 소스 코드 String.java에서 자바 8 소스 코드

따라서 String.valueOf(char)로 변환하는 char데 메모리와 속도 모두에서 가장 효율적인 방법 인 것 같습니다 String.

  1. Java에서 원시 문자를 문자열로 변환하는 방법
  2. 예를 들어 Java에서 Char를 String으로 변환하는 방법

답변

다음은 char c를 String s로 변환하는 다양한 방법입니다 (속도와 효율성의 순서가 감소).

char c = 'a';
String s = String.valueOf(c);             // fastest + memory efficient
String s = Character.toString(c);
String s = new String(new char[]{c});
String s = String.valueOf(new char[]{c});
String s = new Character(c).toString();
String s = "" + c;                        // slowest + memory inefficient


답변

다음 Character.toString()과 같은 방법을 사용하십시오 .

char mChar = 'l';
String s = Character.toString(mChar);


답변

다음 중 하나를 사용하십시오.

String str = String.valueOf('c');
String str = Character.toString('c');
String str = 'c' + "";


답변

@WarFox가 언급했듯이 char을 문자열로 변환하는 6 가지 방법이 있습니다. 그러나 가장 빠른 것은 위의 답변에도 불구하고 연결을 통해 이루어 String.valueOf집니다. 이를 입증하는 벤치 마크는 다음과 같습니다.

@BenchmarkMode(Mode.Throughput)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 10, time = 1, batchSize = 1000, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 1, batchSize = 1000, timeUnit = TimeUnit.SECONDS)
public class CharToStringConversion {

    private char c = 'c';

    @Benchmark
    public String stringValueOf() {
        return String.valueOf(c);
    }

    @Benchmark
    public String stringValueOfCharArray() {
        return String.valueOf(new char[]{c});
    }

    @Benchmark
    public String characterToString() {
        return Character.toString(c);
    }

    @Benchmark
    public String characterObjectToString() {
        return new Character(c).toString();
    }

    @Benchmark
    public String concatBlankStringPre() {
        return c + "";
    }

    @Benchmark
    public String concatBlankStringPost() {
        return "" + c;
    }

    @Benchmark
    public String fromCharArray() {
        return new String(new char[]{c});
    }
}

그리고 결과 :

Benchmark                                        Mode  Cnt       Score      Error  Units
CharToStringConversion.characterObjectToString  thrpt   10   82132.021 ± 6841.497  ops/s
CharToStringConversion.characterToString        thrpt   10  118232.069 ± 8242.847  ops/s
CharToStringConversion.concatBlankStringPost    thrpt   10  136960.733 ± 9779.938  ops/s
CharToStringConversion.concatBlankStringPre     thrpt   10  137244.446 ± 9113.373  ops/s
CharToStringConversion.fromCharArray            thrpt   10   85464.842 ± 3127.211  ops/s
CharToStringConversion.stringValueOf            thrpt   10  119281.976 ± 7053.832  ops/s
CharToStringConversion.stringValueOfCharArray   thrpt   10   86563.837 ± 6436.527  ops/s

보다시피 가장 빠른 것은 c + ""또는 "" + c;

VM version: JDK 1.8.0_131, VM 25.131-b11

이 성능 차이는 -XX:+OptimizeStringConcat최적화 때문 입니다. 여기에서 읽을 수 있습니다 .


답변

이것을 시도하십시오 : Character.toString(aChar)또는 단지 이것 :aChar + ""