Konversi array string menjadi string di Jawa


242

Saya ingin kode Java untuk mengubah array string menjadi string.


Jenis array apa? Array string?
adarshr

2
array.toString()? Lebih spesifik.
Stan Kurilin

1
@ Princeyesuraj, jawaban resmi diberikan oleh adarshr . Jika Anda ingin pemisah sendiri, Anda dapat mencoba jawaban JoeSlav , dan jika tidak ada masalah thread, Anda dapat menggunakan StringBuilder alih-alih StringBuffer untuk efisiensi. Jawaban krock bagus, tapi sedikit berlebihan menurut pendapat saya.
Dante May Code

Jawaban:


470

Jika Anda hanya ingin dump "debug-style" dari array:

String str = Arrays.toString(arr);

atau, untuk kontrol lebih lanjut (sebelum Java 8):

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(Java 8 ke atas):

String str = String.join(",", arr);

Dan jika Anda datang dari sudut Android:

String str = TextUtils.join(",", arr);

Anda dapat memodifikasi di atas tergantung pada karakter apa, jika ada, yang Anda inginkan di antara string.

Anda mungkin melihat kode yang identik dengan kode pra-Jawa 8 tetapi menggunakan StringBuffer- StringBuilderadalah kelas yang lebih baru yang tidak aman untuk thread, tetapi karenanya memiliki kinerja yang lebih baik dalam satu utas karena tidak jauh dengan sinkronisasi yang tidak dibutuhkan. Singkatnya, Anda lebih baik menggunakan StringBuilderdalam 99% kasus - fungsi bijaksana, keduanya identik.

JANGAN gunakan string dan tambahkan saja dengan + = seperti beberapa jawaban yang ditampilkan di sini. Ini mengirimkan GC melalui atap karena Anda membuat dan membuang objek string sebanyak yang Anda punya item dalam array Anda. Untuk array kecil Anda mungkin tidak benar-benar memperhatikan perbedaannya, tetapi untuk array besar itu bisa jadi urutan besarnya lebih lambat.


13
Terima kasih atas penjelasan mengapa StringBuilder lebih unggul daripada + = untuk ditambahkan.
Nicholas Miller

5
Jika Anda menggunakan + = di bawah selimut Java akan mengonversinya menjadi menggunakan StringBuilder.
Javamann

6
@matteo, Anda harus menggunakan Arrays.toString(yourArray);tetapi saya kira Anda menggunakanyourArray.toString();
Dzarafata

5
Karena java, 1.8Anda juga dapat menggunakan String::join, alih-alih untuk-loop. String.join("", arr);
Jorn Vernee

2
Pengembang Android dapat menggunakan seperti hasil String = TextUtils.join (",", daftar); stackoverflow.com/questions/33802971/…
Rahul Hawge

102

Gunakan Apache commons StringUtils.join(). Dibutuhkan array, sebagai parameter (dan juga memiliki kelebihan untuk Iterabledan Iteratorparameter) dan memanggil toString()setiap elemen (jika tidak nol) untuk mendapatkan setiap representasi elemen string. Setiap representasi elemen string kemudian bergabung menjadi satu string dengan pemisah di antaranya jika ditentukan:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

Menghasilkan:

a-b-1

1
perbaikan kecil: joinString = StringUtils.join (Obyek baru [] {"a", "b", "1"}, "-");
questborn

35

Saya suka menggunakan Google's Guava Joiner untuk ini, misalnya:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

akan menghasilkan String yang sama dengan:

new String("Harry, Ron, Hermione");

ETA: Java 8 memiliki dukungan serupa sekarang:

String.join(", ", "Harry", "Ron", "Hermione");

Tidak dapat melihat dukungan untuk melewatkan nilai nol, tapi itu mudah dikerjakan.


10
Tetapi jika kita jujur ​​pada plot, nullakan menjadi "dia yang namanya tidak boleh disebutkan" :-)
Stephen C

22
Jika Anda berani: ;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
rich

Menggunakan java-8String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo

13

Anda bisa melakukan ini, mengingat larik atipe primitif:

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();

23
StringBuffer sudah tua, gunakan StringBuilder sebagai gantinya yang tidak memiliki sinkronisasi yang tidak perlu untuk digunakan dalam satu utas.
Jason S

13

Dari Java 8, cara paling sederhana yang saya pikirkan adalah:

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

Dengan cara ini Anda dapat memilih pembatas yang berubah-ubah.


10

Coba metode Arrays.deepToString .

Mengembalikan representasi string dari "konten dalam" dari array yang ditentukan. Jika array berisi array lain sebagai elemen, representasi string berisi isinya dan seterusnya. Metode ini dirancang untuk mengubah array multidimensi menjadi string


Jika Anda tidak membutuhkan banyak kontrol, saya percaya ini adalah solusi paling sederhana karena Anda tidak memerlukan lib pihak ketiga. Berikut ini contohnya: System.out.println (Arrays.deepToString (args));
neves

7

Coba metode kelebihan Arrays.toString .

Atau yang lain, coba penerapan umum berikut ini:

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}

Kemudian beri tahu kami format yang Anda cari. Kalau tidak, kami tidak dapat menebak apa yang ada dalam pikiran Anda.
Jason S

3

Berikut ini adalah contoh konversi Array ke String.

    kelas publik ArrayToString
    {
public static static utama (String [] args) { String [] strArray = String baru [] {"Java", "PHP", ".NET", "PERL", "C", "COBOL"};

        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}


1
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms

Jika Anda tidak memiliki pilihan tetapi untuk menggunakan Java 6 atau 7 maka Anda harus menggunakan Divide & Conquer join.


0

Anda ingin kode yang menghasilkan string dari arrayList,

Iterate through all elements in list and add it to your String result

Anda dapat melakukan ini dalam 2 cara: menggunakan String sebagai hasil atau StringBuffer / StringBuilder.

Contoh:

String result = "";
for (String s : list) {
    result += s;
}

... tapi ini bukan praktik yang baik karena alasan kinerja. Lebih baik menggunakan StringBuffer (threads safe) atau StringBuilder yang lebih tepat untuk menambahkan Strings


0

Gunakan metode gabungan library Apache Commons ' StringUtils .

String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");

-1
String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);

1
Jawaban Anda pada dasarnya sama dengan smas; hanya sedikit lebih rumit; jadi tentu saja bukan yang "paling mudah". Dan selain itu, Arrays.toString () bahkan lebih mudah.
GhostCat

-22

Jika Anda tahu berapa banyak elemen yang dimiliki array, cara sederhana adalah melakukan ini:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 

10
Itu hampir tidak berlaku di dunia nyata dan menunjukkan beberapa praktik pemrograman yang buruk.
Jk1

3
Bisa jadi medali emas yang luar biasa untuk mencapai -50 negatif
Pablo Cegarra
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.