Ubah String [] menjadi string yang dipisahkan koma di java


109

saya punya satu String[]

String[] name = {"amit", "rahul", "surya"};

saya ingin mengirim nama sebagai parameter dalam query sql di dalam klausa IN jadi bagaimana cara mengubahnya ke dalam format

'amit','rahul','surya'

18
Bagaimana denganString[] name = {"O'Neill"};
Bart Kiers

Jawaban:


31
if (name.length > 0) {
    StringBuilder nameBuilder = new StringBuilder();

    for (String n : name) {
        nameBuilder.append("'").append(n.replace("'", "\\'")).append("',");
        // can also do the following
        // nameBuilder.append("'").append(n.replace("'", "''")).append("',");
    }

    nameBuilder.deleteCharAt(nameBuilder.length() - 1);

    return nameBuilder.toString();
} else {
    return "";
}

10
Kemudian saya akan menulis banyak cek. Saya hanya menjelaskan konsepnya, bukan memberikan contoh simpan semua.
Nico Huysamen

3
Sekali lagi, konsep ... Dan terima kasih atas suara negatifnya. Tapi begitulah, perbaiki.
Nico Huysamen

terima kasih sobat, Anda menyelamatkan hari saya tetapi jika Anda tidak keberatan dapatkah Anda juga memberikan jawaban dari @Bart Kiers karena saya mungkin mengerti situasi itu dan saya baru mengenal pemrograman
Deepak Kumar

7
Ohhh, mengapa perlu menulis begitu banyak baris sumber jika Anda dapat menggunakan String.join(...)atau TextUtils.join(...)?
Eugene Brusov

2
@EugeneBrusov Saya akan pergi dan menebak karena jawabannya diposting pada tahun 2011 jauh sebelum rilis Java 8;)
Nico Huysamen

211

Tulis sendiri metode sederhana, atau gunakan salah satu dari berbagai utilitas di luar sana.

Secara pribadi saya menggunakan apache StringUtils ( StringUtils.join )

edit: di Java 8, Anda tidak memerlukan ini sama sekali:

String joined = String.join(",", name);

3
Persis! Anda bahkan dapat menentukan pembatas Anda sendiri:StringUtils.join(names,',');
kegilaan

5
String list = "'" + StringUtils.join(names,"','") + "'";ini akan memberi Anda tanda kutip tunggal yang dibutuhkan oleh permintaan SQL.
haysclark

Untuk android:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani



47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();

1
@Bmoeller Sudahkah Anda mencoba TextUtils.join(...)? Saya kira kode satu baris bahkan lebih baik dan lebih sederhana daripada lima kode.
Eugene Brusov

27

Anda juga dapat menggunakan org.apache.commons.lang.StringUtilsAPI untuk membentuk hasil yang dipisahkan koma dari larik string di Java.

StringUtils.join(strArr,",");


9

Jika Anda sudah memiliki Spring Framework sebagai dependensi, Anda juga dapat menggunakan metode util yang sangat sederhana:

org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)

7

Anda juga dapat menyederhanakannya menggunakan pustaka Guava:

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";

Bagaimana cara menggunakan pustaka Guava di mana outputnya adalah "amit,rahul,surya":?
Compaq LE2202x

5

menggunakan StringBuilderdan mengulangi String [] Anda, dan menambahkan setiap String ke dalamnya:

public static String convert(String[] name) { 
    StringBuilder sb = new StringBuilder();
    for (String st : name) { 
        sb.append('\'').append(st).append('\'').append(',');
    }
    if (name.length != 0) sb.deleteCharAt(sb.length()-1);
    return sb.toString();
}

4

Anda dapat melakukan ini dengan satu baris kode:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");

3
String[] name = {"amit", "rahul", "surya"};


public static String arrayToString(String array[])
{
    if (array.length == 0) return "";
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < array.length; ++i)
    {
        sb.append(",'").append(array[i]).append("'");
    }
    return sb.substring(1);
}

2
Anda mungkin bermaksud substring(1), tapi bagaimana jika array.length == 0?
Bart Kiers

2

saya menggunakan ini

public static String convertToCommaSeparated(String[] strings) {
    StringBuffer sb = new StringBuffer("");
    for (int i = 0; strings != null && i < strings.length; i++) {
        sb.append(strings[i]);
        if (i < strings.length - 1) {
            sb.append(',');
        }
    }
    return sb.toString();
}

1

StringUtils.joinFungsi USE : Mis

String myCsvString = StringUtils.join(myList, ",")

1
Mengapa memposting jawaban yang sebelumnya telah diposting beberapa kali?
Charles Goodwin

1
String[] paramIdIdList={"P001","P002","P003"};

StringBuilder builder = new StringBuilder();
            for(String paramId : paramIdIdList) {
                builder.append(paramId+",");
            }
            builder.deleteCharAt(builder.length() -1);
            String paramIds = builder.toString();
System.Out.Println(paramIds );

Harap tambahkan deskripsi tentang apa sebenarnya yang dilakukan kode Anda.
Hille

Mengonversi String [] menjadi string yang dipisahkan koma
Vinayak

Dalam jawaban Anda, karena benar tahu ada beberapa kode. Tidak lebih dan tidak kurang, tapi itu tidak membantu.
Hille

1

Meskipun kode itu menggoda dan "keren", jangan gunakan foldataureduce pada kumpulan besar string, karena ini akan mengalami masalah penggabungan string

String[] strings = { "foo", "bar", "baz" };
Optional<String> result = Arrays.stream(strings)
        .reduce((a, b) -> String.format("%s,%s", a, b));
System.out.println(result.get());

Sebagai gantinya, sesuai jawaban lainnya, gunakan String.join() jika Anda sudah memiliki koleksi, atau StringBuilderjika belum.


0
String newNameList=null;

 for(int i = name.length;i>=0;i--){
    if(newNameList==null){
        newNameList = "\'" + name[name.length - i] + "\'";
    }
    else{
        newNameList += ",\'" + name[name.length - i] + "\'";
    }
}

0

Anda mungkin juga tidak ingin menelurkan StringBuilder untuk operasi sederhana seperti itu. Harap perhatikan bahwa saya telah mengubah nama array Anda dari nama menjadi nama demi kesesuaian konten:

String[] names = {"amit", "rahul", "surya"};

String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
    namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";

0

Dua baris (tidak termasuk deklarasi; 'finalstring' pada awalnya harus dideklarasikan sama dengan string kosong), jika Anda tidak terlalu peduli tentang jarak vertikal pada loop for ():

for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);

Dua baris, Anda sudah selesai. :)


0

berikut adalah metode Utilitas untuk memisahkan larik dan meletakkan pembatas kustom Anda, menggunakan

String.replace(String,String)
Arrays.toString(Object[])

ini dia :

public static String toString(String delimiter, Object[]array){
    String s = "";

    // split array
    if (array != null && array.length > 0) {
        s = Arrays.toString(array).replace("[", "").replace("]", "");
    }

    // place delimiter (notice the space in ", ")
    if(delimiter != null){
        s = s.replace(", ", delimiter);
    }

    return s;
}

ubah tipe argumen kedua untuk menyesuaikan tipe array Anda


0

Ini akan menjadi cara yang dioptimalkan untuk melakukannya

StringBuilder sb = new StringBuilder();
for (String n : arr) { 
    sb.append("'").append(n).append("',");
}
if(sb.length()>0)
    sb.setLength(sbDiscrep.length()-1);
return sb.toString();

0

Perluasan untuk solusi Java 8 sebelumnya

String result = String.join(",", name);

Jika Anda membutuhkan prefiks atau / dan sufiks untuk nilai array

 StringJoiner joiner = new StringJoiner(",");
 for (CharSequence cs: name) {
     joiner.add("'" + cs + "'");
 }
 return joiner.toString();

Atau konsep metode sederhana

  public static String genInValues(String delimiter, String prefix, String suffix, String[] name) {
    StringJoiner joiner = new StringJoiner(delimiter);
    for (CharSequence cs: name) {
      joiner.add(prefix + cs + suffix);
    }
    return joiner.toString();
  }

Sebagai contoh

For Oracle i need "id in (1,2,3,4,5)" 
then use genInValues(",", "", "", name);
But for Postgres i need "id in (values (1),(2),(3),(4),(5))"
then use genInValues(",", "(", ")", name);

-1

Ini membantu saya !!!

private static String convertArrayToString(String [] strArray) {
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i<= strArray.length-1; i++) {
                if(i == strArray.length-1) {
                    builder.append("'"+strArray[i]+"'");
                }else {
                    builder.append("'"+strArray[i]+"'"+",");
                }
            }
            return builder.toString();
        }

3
Harap berikan beberapa konteks untuk jawaban Anda.
Matthieu Brucher
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.