ฉันมีหนึ่ง String[]
String[] name = {"amit", "rahul", "surya"};
ฉันต้องการส่งชื่อเป็นพารามิเตอร์ในแบบสอบถาม sql ภายในคำสั่ง IN ดังนั้นฉันจะแปลงเป็นรูปแบบได้อย่างไร
'amit','rahul','surya'
ฉันมีหนึ่ง String[]
String[] name = {"amit", "rahul", "surya"};
ฉันต้องการส่งชื่อเป็นพารามิเตอร์ในแบบสอบถาม sql ภายในคำสั่ง IN ดังนั้นฉันจะแปลงเป็นรูปแบบได้อย่างไร
'amit','rahul','surya'
คำตอบ:
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(...)หรือTextUtils.join(...)?
เขียนวิธีง่ายๆด้วยตัวคุณเองหรือใช้ยูทิลิตี้ต่างๆที่มีอยู่
โดยส่วนตัวฉันใช้ apache StringUtils ( StringUtils.join )
แก้ไข: ใน Java 8 คุณไม่ต้องการสิ่งนี้อีกต่อไป:
String joined = String.join(",", name);
StringUtils.join(names,',');
String list = "'" + StringUtils.join(names,"','") + "'";สิ่งนี้จะให้คำพูดเดี่ยวที่จำเป็นสำหรับคำขอ SQL
TextUtils.join(",", stringArrayOfEmails)
นักพัฒนา Android อาจกำลังมองหา TextUtils.join
เอกสาร Android: http://developer.android.com/reference/android/text/TextUtils.html
รหัส:
String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)
ดีและเรียบง่าย แต่ต้องใช้ 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(...)รึยัง? ฉันเดาว่ารหัสบรรทัดเดียวดีกว่าและง่ายกว่าห้ารหัสด้วยซ้ำ
คุณยังสามารถใช้org.apache.commons.lang.StringUtilsAPI เพื่อสร้างผลลัพธ์ที่คั่นด้วยคอมมาจากสตริงอาร์เรย์ใน Java
StringUtils.join(strArr,",");
หากคุณมี Spring Framework เป็นแบบพึ่งพาอยู่แล้วคุณสามารถใช้วิธีการใช้งานที่ง่ายมาก:
org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)
คุณยังสามารถทำให้มันง่ายขึ้นโดยใช้ห้องสมุด Guava:
String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
.replace(",", "','") + "'";
"amit,rahul,surya"?
ใช้StringBuilderและวนซ้ำบน String [] ของคุณและต่อท้ายแต่ละ String เข้าไป:
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();
}
คุณสามารถทำได้โดยใช้รหัสบรรทัดเดียว:
Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");
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)แต่ถ้าarray.length == 0ล่ะ?
ฉันใช้สิ่งนี้
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();
}
StringUtils.joinฟังก์ชันUSE : เช่น
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 );
ในฐานะที่เป็นที่ดึงดูดและ "เจ๋ง" เนื่องจากโค้ดอาจปรากฏขึ้นอย่าใช้foldหรือreduceในคอลเลกชันของสตริงจำนวนมากเนื่องจากสิ่งเหล่านี้จะประสบปัญหาการต่อสายอักขระ
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());
ตามคำตอบอื่น ๆ ให้ใช้String.join()ว่าคุณมีคอลเลกชันอยู่แล้วหรือStringBuilderถ้าไม่มี
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] + "\'";
}
}
คุณอาจไม่ต้องการวาง StringBuilder สำหรับการใช้งานง่ายๆเช่นนี้ โปรดทราบว่าฉันได้เปลี่ยนชื่ออาร์เรย์ของคุณจากชื่อเป็นชื่อเพื่อความสอดคล้องของเนื้อหา:
String[] names = {"amit", "rahul", "surya"};
String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";
สองบรรทัด (ไม่รวมการประกาศ 'finalstring' ควรประกาศในตอนแรกเท่ากับสตริงว่าง) หากคุณไม่สนใจมากเกี่ยวกับการเว้นวรรคในแนวตั้งของลูป for ():
for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);
สองบรรทัดเสร็จแล้ว :)
นี่คือวิธียูทิลิตี้เพื่อแยกอาร์เรย์และใส่ตัวคั่นที่กำหนดเองโดยใช้
String.replace(String,String)
Arrays.toString(Object[])
นี่คือ:
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;
}
เปลี่ยนประเภทอาร์กิวเมนต์ที่สองเพื่อให้เหมาะกับประเภทอาร์เรย์ของคุณ
นี่จะเป็นวิธีที่ดีที่สุดในการทำ
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();
ส่วนขยายสำหรับโซลูชัน Java 8 ก่อนหน้า
String result = String.join(",", name);
หากคุณต้องการคำนำหน้าหรือ / และคำต่อท้ายสำหรับค่าอาร์เรย์
StringJoiner joiner = new StringJoiner(",");
for (CharSequence cs: name) {
joiner.add("'" + cs + "'");
}
return joiner.toString();
หรือแนวคิดวิธีการง่ายๆ
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();
}
ตัวอย่างเช่น
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);
ของฉันมีประโยชน์ !!!
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"};