แปลง String [] เป็นสตริงที่คั่นด้วยจุลภาคใน java


109

ฉันมีหนึ่ง String[]

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

ฉันต้องการส่งชื่อเป็นพารามิเตอร์ในแบบสอบถาม sql ภายในคำสั่ง IN ดังนั้นฉันจะแปลงเป็นรูปแบบได้อย่างไร

'amit','rahul','surya'

18
What aboutString[] name = {"O'Neill"};
Bart Kiers

คำตอบ:


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
จากนั้นฉันจะเขียนเช็คจำนวนมาก ฉันแค่อธิบายแนวคิดไม่ใช่ยกตัวอย่างบันทึกทั้งหมด
Nico Huysamen

3
อีกครั้งแนวคิด ... และขอขอบคุณสำหรับการลงคะแนน แต่คุณไปแก้ไขแล้ว
Nico Huysamen

ขอบคุณเพื่อนที่ช่วยวันของฉัน แต่ถ้าคุณไม่รังเกียจคุณสามารถให้คำตอบของ @Bart Kiers ได้ด้วยเพราะฉันอาจได้รับสถานการณ์นั้นและฉันยังใหม่กับการเขียนโปรแกรม plz
Deepak Kumar

7
โอ้ทำไมต้องเขียนซอร์สไลน์จำนวนมากถ้าคุณสามารถใช้String.join(...)หรือTextUtils.join(...)?
Eugene Brusov

2
@EugeneBrusov ฉันจะไปเดาเพราะคำตอบที่โพสต์ในปี 2011 นานก่อนที่จะมีการเปิดตัว Java 8;)
Nico Huysamen

211

เขียนวิธีง่ายๆด้วยตัวคุณเองหรือใช้ยูทิลิตี้ต่างๆที่มีอยู่

โดยส่วนตัวฉันใช้ apache StringUtils ( StringUtils.join )

แก้ไข: ใน Java 8 คุณไม่ต้องการสิ่งนี้อีกต่อไป:

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

3
เป๊ะ! คุณสามารถกำหนดตัวคั่นของคุณเองได้:StringUtils.join(names,',');
วิกลจริต

5
String list = "'" + StringUtils.join(names,"','") + "'";สิ่งนี้จะให้คำพูดเดี่ยวที่จำเป็นสำหรับคำขอ SQL
haysclark

สำหรับ 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 ลองTextUtils.join(...)รึยัง? ฉันเดาว่ารหัสบรรทัดเดียวดีกว่าและง่ายกว่าห้ารหัสด้วยซ้ำ
Eugene Brusov

27

คุณยังสามารถใช้org.apache.commons.lang.StringUtilsAPI เพื่อสร้างผลลัพธ์ที่คั่นด้วยคอมมาจากสตริงอาร์เรย์ใน Java

StringUtils.join(strArr,",");


9

หากคุณมี Spring Framework เป็นแบบพึ่งพาอยู่แล้วคุณสามารถใช้วิธีการใช้งานที่ง่ายมาก:

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

7

คุณยังสามารถทำให้มันง่ายขึ้นโดยใช้ห้องสมุด Guava:

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

ฉันจะใช้ Guava library โดยที่ output คือ: "amit,rahul,surya"?
Compaq LE2202x

5

ใช้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();
}

4

คุณสามารถทำได้โดยใช้รหัสบรรทัดเดียว:

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
คุณอาจหมายถึงsubstring(1)แต่ถ้าarray.length == 0ล่ะ?
Bart Kiers

2

ฉันใช้สิ่งนี้

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
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 );

โปรดเพิ่มคำอธิบายว่าโค้ดของคุณใช้ทำอะไรกันแน่
Hille

การแปลงสตริง [] เป็นสตริงที่คั่นด้วยจุลภาค
Vinayak

ในคำตอบของคุณเพราะรู้ดีว่ามีรหัสบางอย่าง ไม่มีอะไรมากและไม่มีอะไรน้อย แต่มันก็ช่วยไม่ได้
Hille

1

ในฐานะที่เป็นที่ดึงดูดและ "เจ๋ง" เนื่องจากโค้ดอาจปรากฏขึ้นอย่าใช้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ถ้าไม่มี


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

คุณอาจไม่ต้องการวาง StringBuilder สำหรับการใช้งานง่ายๆเช่นนี้ โปรดทราบว่าฉันได้เปลี่ยนชื่ออาร์เรย์ของคุณจากชื่อเป็นชื่อเพื่อความสอดคล้องของเนื้อหา:

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

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

0

สองบรรทัด (ไม่รวมการประกาศ 'finalstring' ควรประกาศในตอนแรกเท่ากับสตริงว่าง) หากคุณไม่สนใจมากเกี่ยวกับการเว้นวรรคในแนวตั้งของลูป for ():

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

สองบรรทัดเสร็จแล้ว :)


0

นี่คือวิธียูทิลิตี้เพื่อแยกอาร์เรย์และใส่ตัวคั่นที่กำหนดเองโดยใช้

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;
}

เปลี่ยนประเภทอาร์กิวเมนต์ที่สองเพื่อให้เหมาะกับประเภทอาร์เรย์ของคุณ


0

นี่จะเป็นวิธีที่ดีที่สุดในการทำ

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

ส่วนขยายสำหรับโซลูชัน 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);

-1

ของฉันมีประโยชน์ !!!

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
โปรดระบุบริบทสำหรับคำตอบของคุณ
Matthieu Brucher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.