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.
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:
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".
package naresh.java;publicclassTestDoubleString{publicstaticvoid 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 charArraytry{if(charArray[i]==charArray[i+1]){
charArray[i]='0';}}catch(Exception e){System.out.println("Exception");}}//finally printing final character stringfor(int k=0;k<charArray.length;k++){if(charArray[k]!='0'){System.out.println(charArray[k]);}}}}
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
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""
Jawaban:
Tidak, solusi itu benar sekali dan sangat minim.
Namun perlu dicatat, bahwa ini adalah situasi yang sangat tidak biasa: Karena
String
ditangani secara khusus di Jawa, bahkan"foo"
sebenarnya adalah aString
. Jadi kebutuhan untuk memisahkan String menjadi individuchar
dan bergabung kembali tidak diperlukan dalam kode normal.Bandingkan ini dengan C / C ++ di mana
"foo"
Anda memiliki bundel yangchar
diakhiri dengan nol byte di satu sisi danstring
di sisi lain dan banyak konversi di antara mereka karena melakukan metode warisan.sumber
String text = String.copyValueOf(data);
atau
String text = String.valueOf(data);
bisa dibilang lebih baik (merangkum
new String
panggilan).sumber
String(char[])
atau varian dari itu. Dan bagian salinan dilakukan di dalamString(char[])
. Ini tidak memberikan manfaat untuk panggilan langsung selain simetri denganvalueOf
metode lain .String
akan 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 ituString
. Oleh karena itu premis saya adalah: Gunakan palu terkecil yang cocok, bukan yang terbesar yang tersedia.CharSequence
antarmuka 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.Ini akan mengubah array char kembali menjadi string:
sumber
Sekarang untuk mengubah array karakter menjadi String, ada dua cara.
Mengembalikan string
[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]
.Dan:
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"
.sumber
String di java hanyalah sebuah objek di sekitar array karakter. Karena itu a
identik dengan String tanpa kotak dengan karakter yang sama. Dengan membuat String baru dari array karakter Anda
Anda pada dasarnya memberitahu kompiler untuk secara otomatis objek String di sekitar array karakter Anda.
sumber
Anda bisa menggunakan
String.valueOf
metode.Sebagai contoh,
Untuk lebih lanjut tentang char array to string Anda dapat merujuk tautan di bawah
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
https://www.flowerbrackets.com/convert-char-array-to-string-java/
sumber
sumber
Mengubah tipe Array apa saja ke String menggunakan fungsi Java 8 Stream
sumber
Coba gunakan
java.util.Arrays
. Modul ini memiliki beragam metode berguna yang dapat digunakan terkait dengan Array.sumber
Coba ini
sumber
Cukup gunakan String.value seperti di bawah ini;
sumber
Coba ini:
sumber
Anda juga dapat menggunakan kelas StringBuilder
Penggunaan String atau StringBuilder bervariasi sesuai dengan persyaratan metode Anda.
sumber
1 cara alternatif adalah dengan melakukan:
sumber
toString
berfungsi dengan benarchar[]
. Ini mungkin bekerja pada beberapa vendor dan versi JVM tertentu.a
dan pembuatan objek String lain yang digabungkan dengana.toString()
dan""