Bagaimana cara mengubah char menjadi String?

837

Saya punya chardan saya butuh String. Bagaimana cara saya mengkonversi dari satu ke yang lain?

Landon Kuhn
sumber
187
Diturunkan? Mengapa saya mengajukan pertanyaan semudah itu? Karena Google tidak memiliki hasil pencarian yang sangat jelas untuk pertanyaan ini. Dengan meletakkan ini di sini kita akan mengubahnya.
Landon Kuhn
45
Saya sepenuhnya setuju dengan pendapat Anda. Saya memilih ini untuk menyingkirkan suara negatif. Saya sangat yakin membuat topik googling seperti ini lebih mudah untuk semua orang. =)
prolink007
4
Apakah penelitian Anda termasuk membaca dokumentasi kelas String?
DJClayworth
12
@DJClayworth Sebagian besar pertanyaan SO bisa dijawab dengan RTFM, tapi itu tidak terlalu membantu. Mengapa tidak membiarkan orang-orang yang menemukan pertanyaan itu mengangkatnya dan membiarkan segala sesuatunya berjalan?
beldaz
10
@PaulBellora Hanya StackOverflow yang menjadi perhentian pertama untuk penelitian. Jika ada tautan StackOverlfow di 10 Hasil Google pertama yang saya ikuti di sini.
Martin

Jawaban:

642

Anda bisa menggunakannya Character.toString(char). Perhatikan bahwa metode ini hanya mengembalikan panggilan ke String.valueOf(char), yang juga berfungsi.

Seperti yang telah dicatat oleh orang lain, penggabungan string juga berfungsi sebagai jalan pintas:

String s = "" + 's';

Tetapi ini mengkompilasi ke:

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

yang kurang efisien karena StringBuilderdidukung oleh char[](over-dialokasikan oleh StringBuilder()ke 16), hanya untuk array yang akan membela diri disalin oleh yang dihasilkan String.

String.valueOf(char)"dapatkan di pintu belakang" dengan membungkus chardalam array elemen tunggal dan meneruskannya ke konstruktor pribadi paket String(char[], boolean), yang menghindari salinan array.

Paul Bellora
sumber
Saya pikir pintasan mengkompilasi ke:new StringBuilder("").append('s').toString();
Binkan Salaryman
@BinkanSalaryman menggunakan javac 1.8.0_51-b16 dan kemudian javap untuk mendekompilasi, saya melihat panggilan konstruktor / metode yang saya miliki dalam jawabannya. Apa yang kamu gunakan?
Paul Bellora
237

Pertanyaan yang bagus Saya punya lima metode berikut 6 untuk melakukannya.

// #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});

Catatan: Character.toString (char) mengembalikan String.valueOf (char) . Jadi efektif keduanya sama.

String.valueOf(char[] value)memanggil new String(char[] value), yang pada gilirannya menetapkan valuearray char.

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

Di sisi lain String.valueOf(char value)memanggil konstruktor pribadi paket berikut .

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

Kode sumber dari String.javadalam kode sumber Java 8

Oleh karena itu String.valueOf(char)tampaknya menjadi metode yang paling efisien, baik dari segi memori dan kecepatan, untuk mengkonversi charke String.

  1. Bagaimana mengkonversi char primitive ke String di Java
  2. Bagaimana mengkonversi Char ke String di Java dengan Contoh
WarFox
sumber
50

Di bawah ini adalah berbagai cara untuk mengonversi ke char c ke String s (dalam urutan penurunan kecepatan dan efisiensi)

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
sactiw
sumber
seseorang menguji ini?
Lucas Noetzold
34

Gunakan Character.toString()metode seperti ini:

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

Gunakan salah satu dari yang berikut:

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

Seperti yang dikatakan @WarFox - ada 6 metode untuk mengkonversi char ke string. Namun, yang tercepat akan melalui gabungan, meskipun jawaban di atas menyatakan itu String.valueOf. Inilah patokan yang membuktikan bahwa:

@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});
    }
}

Dan hasil:

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

Seperti yang Anda lihat, yang tercepat adalah c + ""atau "" + c;

VM version: JDK 1.8.0_131, VM 25.131-b11

Perbedaan kinerja ini disebabkan oleh -XX:+OptimizeStringConcatoptimasi. Anda dapat membacanya di sini .

Dmitriy Dumanskiy
sumber
15

Coba ini: Character.toString(aChar)atau ini saja:aChar + ""

Óscar López
sumber
4

Kami memiliki berbagai cara untuk mengonversi a charmenjadi String. Salah satu caranya adalah dengan menggunakan metode statis toString()di Characterkelas:

char ch = 'I'; 
String str1 = Character.toString(ch);

Sebenarnya toStringmetode ini secara internal menggunakan valueOfmetode dari Stringkelas yang menggunakan array char:

public static String toString(char c) {
    return String.valueOf(c);
}

Jadi cara kedua adalah menggunakan ini secara langsung:

String str2 = String.valueOf(ch);

valueOfMetode ini di Stringkelas menggunakan array char:

public static String valueOf(char c) {
        char data[] = {c};
        return new String(data, true);
}

Jadi cara ketiga adalah menggunakan array anonim untuk membungkus satu karakter dan kemudian meneruskannya ke Stringkonstruktor:

String str4 = new String(new char[]{ch});

Cara keempat adalah menggunakan penggabungan:

String str3 = "" + ch;

Ini sebenarnya akan menggunakan appendmetode dari StringBuilderkelas yang sebenarnya lebih disukai ketika kita melakukan penggabungan dalam satu lingkaran.

akhil_mittal
sumber
4

Berikut adalah beberapa metode, tanpa urutan tertentu:

char c = 'c';

String s = Character.toString(c); // Most efficient way

s = new Character(c).toString(); // Same as above except new Character objects needs to be garbage-collected

s = c + ""; // Least efficient and most memory-inefficient, but common amongst beginners because of its simplicity

s = String.valueOf(c); // Also quite common

s = String.format("%c", c); // Not common

Formatter formatter = new Formatter();
s = formatter.format("%c", c).toString(); // Same as above
formatter.close();
HyperNeutrino
sumber
2

Saya mengubah Char Array ke String

Char[] CharArray={ 'A', 'B', 'C'};
String text = String.copyValueOf(CharArray);
Siwa
sumber
Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka. - Dari Ulasan
pczeus
Saya Mengkonversi Char Array ke String @pczeus
Shiva
0

Saya sudah mencoba saran tetapi akhirnya menerapkannya sebagai berikut

editView.setFilters(new InputFilter[]{new InputFilter()
        {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend)
            {
                String prefix = "http://";

                //make sure our prefix is visible
                String destination = dest.toString();

                //Check If we already have our prefix - make sure it doesn't
                //get deleted
                if (destination.startsWith(prefix) && (dstart <= prefix.length() - 1))
                {
                    //Yep - our prefix gets modified - try preventing it.
                    int newEnd = (dend >= prefix.length()) ? dend : prefix.length();

                    SpannableStringBuilder builder = new SpannableStringBuilder(
                            destination.substring(dstart, newEnd));
                    builder.append(source);
                    if (source instanceof Spanned)
                    {
                        TextUtils.copySpansFrom(
                                (Spanned) source, 0, source.length(), null, builder, newEnd);
                    }

                    return builder;
                }
                else
                {
                    //Accept original replacement (by returning null)
                    return null;
                }
            }
        }});
zmicer
sumber