Bagaimana cara mengubah array char kembali menjadi string?

405

Saya punya array char:

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

Solusi saya saat ini adalah melakukan

String b = new String(a);

Tetapi tentunya ada cara yang lebih baik untuk melakukan ini?

chutsu
sumber
151
Mengapa berpikir bahwa ada cara yang lebih baik? Dan jangan panggil aku Shirley. :)
Hovercraft Full Of Belut
Karena saya selalu mengaitkan membuat variabel baru seperti di atas untuk memiliki sedikit lebih dari kepala selama runtime. Seperti jika saya meletakkan baris di atas untuk mengubah array char ke string menjadi for for loop misalnya, bagi saya itu tidak terlihat benar. Dan ya saya sedikit perfeksionis. . .
chutsu
1
Jika Anda memiliki banyak dari orang-orang ini, katakan sebuah array atau kumpulan char [], maka mungkin Anda akan menambahkan array char ke StringBuffer, tetapi untuk sebuah String di sini atau di sana, apa yang Anda posting adalah yang paling banyak digunakan.
Hovercraft Full Of Belut
Jika Anda mencari cara untuk menghindari menyalin char [] maka tidak ada satu pun. Kalau tidak, Anda bisa menumbangkan ketidakmampuan String.
Paul Cager
13
"membuat variabel baru" dikenakan nol overhead. Variabel adalah nama yang digunakan untuk merujuk ke nilai, dan nama itu sendiri tidak ada di mana saja dalam memori saat runtime (setidaknya, tidak dalam bahasa seperti Java di mana refleksi cukup terbatas). "Overhead" berasal dari membangun nilai baru , dan tidak ada jalan lain dalam kasus Anda, mengingat masalah Anda adalah "membangun nilai ini". Anda tidak dapat menyebabkan array char secara ajaib bertransformasi menjadi sebuah String. Anda dapat mengatur agar array char asli menjadi sampah setelah String dibuat.
Karl Knechtel

Jawaban:

212

Tidak, solusi itu benar sekali dan sangat minim.

Namun perlu dicatat, bahwa ini adalah situasi yang sangat tidak biasa: Karena Stringditangani secara khusus di Jawa, bahkan "foo"sebenarnya adalah a String. Jadi kebutuhan untuk memisahkan String menjadi individu chardan bergabung kembali tidak diperlukan dalam kode normal.

Bandingkan ini dengan C / C ++ di mana "foo"Anda memiliki bundel yang chardiakhiri dengan nol byte di satu sisi dan stringdi sisi lain dan banyak konversi di antara mereka karena melakukan metode warisan.

AH
sumber
146

String text = String.copyValueOf(data);

atau

String text = String.valueOf(data);

bisa dibilang lebih baik (merangkum new Stringpanggilan).

David Titarenco
sumber
6
Kedua metode memanggil String(char[])atau varian dari itu. Dan bagian salinan dilakukan di dalam String(char[]). Ini tidak memberikan manfaat untuk panggilan langsung selain simetri dengan valueOfmetode lain .
AH
1
statis dan lebih banyak OOP adalah kontradiksi istilah. Apa pun yang dinyatakan statis bukanlah bagian dari objek atau perilakunya dan karenanya tidak berorientasi objek. Selain itu - jika ada kemungkinan implementasi Stringakan diubah dan / atau ditingkatkan dengan cara yang tidak kompatibel atau beberapa implementasi yang bersaing dapat dipilih saat runtime, maka metode pabrik statis masuk akal. Ini tidak akan terjadi dengan hal tingkat rendah seperti itu String. Oleh karena itu premis saya adalah: Gunakan palu terkecil yang cocok, bukan yang terbesar yang tersedia.
AH
@Aku tidak tahu tentang itu. String memberi jalan kepada StringBuffer yang memberi jalan kepada StringBuilder. Saya yakin para pendukung StringBuffer mengatakan hal yang sama, dan sekarang harus memperbaiki kode untuk menggunakan StringBuilder.
corsiKa
1
@AH Fakta bahwa mereka harus membuat CharSequenceantarmuka menunjukkan betapa cacatnya "tidak akan terjadi dengan hal-hal tingkat rendah seperti string" adalah - mereka tidak mengubah apa yang terjadi dalam string karena mereka mengikat diri mereka ke sana sejak awal, dan sekarang mereka berharap mereka tidak akan melakukannya.
corsiKa
1
@corsiKa Saya tidak mengatakan, bahwa API API semuanya baik dan emas. Hanya saja itu tidak akan berubah dengan cara yang tidak kompatibel dan bahwa kelas itu sendiri dan konstruktornya tidak akan pergi ke mana pun. :-)
AH
37

Ini akan mengubah array char kembali menjadi string:

char[] charArray = {'a', 'b', 'c'};
String str = String.valueOf(charArray);
Billz
sumber
14
String str = "wwwwww3333dfevvv";
char[] c = str.toCharArray();

Sekarang untuk mengubah array karakter menjadi String, ada dua cara.

Arrays.toString(c);

Mengembalikan string [w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v].

Dan:

String.valueOf(c)

Mengembalikan string wwwwww3333dfevvv.

Dalam Ringkasan : perhatikan Arrays.toString(c), karena Anda akan mendapatkan "[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]"alih-alih "wwwwww3333dfevvv".

AalekhG
sumber
7

String di java hanyalah sebuah objek di sekitar array karakter. Karena itu a

char[]

identik dengan String tanpa kotak dengan karakter yang sama. Dengan membuat String baru dari array karakter Anda

new String(char[])

Anda pada dasarnya memberitahu kompiler untuk secara otomatis objek String di sekitar array karakter Anda.

Nathan Meyer
sumber
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]);
            }       }
    }
}
Ramnaresh Mantri
sumber
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
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

Mengubah tipe Array apa saja ke String menggunakan fungsi Java 8 Stream

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

Coba gunakan java.util.Arrays. Modul ini memiliki beragam metode berguna yang dapat digunakan terkait dengan Array.

Arrays.toString(your_array_here[]);
Adzz
sumber
0

Coba ini

Arrays.toString(array)
Jessica Pereira
sumber
0

Cukup gunakan String.value seperti di bawah ini;

  private static void h() {

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

        char [] charArr = helloWorld.toCharArray();

        System.out.println(String.valueOf(charArr));
    }
Akash Yellappa
sumber
-3

Coba ini:

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

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

Anda juga dapat menggunakan kelas StringBuilder

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

Penggunaan String atau StringBuilder bervariasi sesuai dengan persyaratan metode Anda.

Jagmeet Singh
sumber
Mengapa demikian? Apa yang Anda dapatkan dari melakukan ini?
Casey
-12

1 cara alternatif adalah dengan melakukan:

String b = a + "";
Prasanna A
sumber
3
ini salah karena menganggap itu toStringberfungsi dengan benar char[]. Ini mungkin bekerja pada beberapa vendor dan versi JVM tertentu.
Dari tanggal
3
Karena kelas String tidak dapat diubah, ini akan menyebabkan dua operasi dilakukan: panggilan toString () adan pembuatan objek String lain yang digabungkan dengan a.toString()dan""
Alpay