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'
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'
Jawaban:
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 "";
}
String.join(...)atau TextUtils.join(...)?
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);
StringUtils.join(names,',');
String list = "'" + StringUtils.join(names,"','") + "'";ini akan memberi Anda tanda kutip tunggal yang dibutuhkan oleh permintaan SQL.
TextUtils.join(",", stringArrayOfEmails)
Pengembang Android mungkin mencari TextUtils.join
Dokumen Android: http://developer.android.com/reference/android/text/TextUtils.html
Kode:
String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)
Bagus dan sederhana: tapi dibutuhkan java8!
String result = String.join(",", names);
StringBuilder sb = new StringBuilder();
for (String n : name) {
if (sb.length() > 0) sb.append(',');
sb.append("'").append(n).append("'");
}
return sb.toString();
TextUtils.join(...)? Saya kira kode satu baris bahkan lebih baik dan lebih sederhana daripada lima kode.
Anda juga dapat menggunakan org.apache.commons.lang.StringUtilsAPI untuk membentuk hasil yang dipisahkan koma dari larik string di Java.
StringUtils.join(strArr,",");
Anda juga dapat menyederhanakannya menggunakan pustaka Guava:
String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
.replace(",", "','") + "'";
"amit,rahul,surya":?
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();
}
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);
}
substring(1), tapi bagaimana jika array.length == 0?
StringUtils.joinFungsi USE : Mis
String myCsvString = StringUtils.join(myList, ",")
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 );
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.
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 + "'";
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. :)
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
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);
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();
}
String[] name = {"O'Neill"};