Konvertieren Sie String [] in einen durch Kommas getrennten String in Java

108

Ich habe eine String[]

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

Ich möchte einen Namen als Parameter in einer SQL-Abfrage innerhalb der IN-Klausel senden. Wie konvertiere ich in ein Format?

'amit','rahul','surya'
Deepak Kumar
quelle
18
Was ist mitString[] name = {"O'Neill"};
Bart Kiers

Antworten:

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 "";
}
Nico Huysamen
quelle
10
Dann hätte ich ein paar Schecks ausgestellt. Ich erkläre nur das Konzept und gebe nicht das Beispiel "Alles speichern".
Nico Huysamen
3
Nochmals Konzepte ... Und danke für die Ablehnung. Aber los geht's, behoben.
Nico Huysamen
danke Kumpel, du rettest meinen Tag, aber wenn es dir nichts ausmacht, kannst du auch die Antwort von @Bart Kiers geben, weil ich diese Situation bekommen könnte und ich neu in der Programmierung von PLZ bin
Deepak Kumar
7
Ohhh, warum müssen so viele Quellzeilen geschrieben werden, wenn Sie einfach String.join(...)oder verwenden können TextUtils.join(...)?
Eugene Brusov
2
@ EugeneBrusov Ich werde gehen und raten, weil die Antwort im Jahr 2011 lange vor der Veröffentlichung von Java 8 veröffentlicht wurde;)
Nico Huysamen
210

Schreiben Sie entweder selbst eine einfache Methode oder verwenden Sie eines der verschiedenen Dienstprogramme.

Persönlich benutze ich Apache StringUtils ( StringUtils.join )

edit: in Java 8 brauchst du das überhaupt nicht mehr:

String joined = String.join(",", name);
Joeri Hendrickx
quelle
3
Genau! Sie können sogar Ihre eigenen Begrenzer definieren:StringUtils.join(names,',');
Wahnsinn
5
String list = "'" + StringUtils.join(names,"','") + "'";Dies würde Ihnen die einfachen Anführungszeichen geben, die von der SQL-Anforderung benötigt werden.
Hayclark
Für Android:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani
50

Schön und einfach: aber Java8 erforderlich!

String result = String.join(",", names);
Christopher Perry
quelle
47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();
NPE
quelle
1
@Bmoeller Hast du es versucht TextUtils.join(...)? Ich denke, ein Zeilencode ist noch besser und einfacher als fünf.
Eugene Brusov
27

Sie können die org.apache.commons.lang.StringUtilsAPI auch verwenden , um ein durch Kommas getrenntes Ergebnis vom Zeichenfolgenarray in Java zu bilden.

StringUtils.join(strArr,",");

user797649
quelle
9

Wenn Sie Spring Framework bereits als Abhängigkeit haben, können Sie auch die sehr einfache util-Methode verwenden:

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

Sie können es auch mithilfe der Guava-Bibliothek vereinfachen:

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";
acvcu
quelle
Wie verwende ich die Guava-Bibliothek mit der Ausgabe : "amit,rahul,surya"?
Compaq LE2202x
5

Verwenden StringBuilderund iterieren Sie Ihren String [] und hängen Sie jeden String an:

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();
}
amit
quelle
4

Sie können dies mit einer Codezeile tun:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");
nullbyte
quelle
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);
}
Martijn Courteaux
quelle
2
Sie meinten wahrscheinlich substring(1), aber was wäre wenn array.length == 0?
Bart Kiers
2

ich benutze das

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();
}
Sodiq
quelle
1

USE- StringUtils.joinFunktion: ZB

String myCsvString = StringUtils.join(myList, ",")
Manu
quelle
1
Warum eine Antwort posten, die zuvor mehrfach gepostet wurde?
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 );
Vinayak
quelle
Bitte fügen Sie eine Beschreibung hinzu, was Ihr Code genau tut.
Hille
Konvertieren von String [] in einen durch Kommas getrennten String
Vinayak
In Ihrer Antwort, weil richtig weiß, dass es einen Code gibt. Nicht mehr und nicht weniger, aber es ist keine Hilfe.
Hille
1

So verlockend und „cool“ , wie der Code angezeigt werden, nicht verwenden foldoderreduce auf große Sammlungen von Zeichenketten, da diese aus dem leiden String - Verkettung Problem

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

Verwenden String.join()Sie stattdessen gemäß anderen Antworten, wenn Sie bereits eine Sammlung haben, oder eine, StringBuilderwenn nicht.

StuartLC
quelle
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] + "\'";
    }
}
Logan
quelle
0

Möglicherweise möchten Sie StringBuilder auch nicht für eine so einfache Operation erzeugen. Bitte beachten Sie, dass ich den Namen Ihres Arrays aus Gründen der Inhaltskonformität von Name in Namen geändert habe :

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

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

Zwei Zeilen (ohne Deklarationen; 'finalstring' sollte anfangs gleich einer leeren Zeichenfolge deklariert werden), wenn Sie nicht viel Wert auf den vertikalen Abstand der for () -Schleife legen:

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

Zwei Zeilen, du bist fertig. :) :)

Matt Campbell
quelle
0

Hier ist eine Utility-Methode, mit der Sie ein Array aufteilen und Ihr benutzerdefiniertes Trennzeichen mit verwenden können

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

hier ist es :

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

Ändern Sie den zweiten Argumenttyp entsprechend Ihrem Array-Typ

Ahmed Adel Ismail
quelle
0

Dies wäre eine optimierte Vorgehensweise

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();
Riz
quelle
0

Erweiterung für frühere Java 8-Lösung

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

Wenn Sie ein Präfix oder / und ein Suffix für Array-Werte benötigen

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

Oder einfaches Methodenkonzept

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

Beispielsweise

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);
Flüchtig
quelle
-1

Das kann hilfreich sein !!!

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();
        }
Jyoti Prakash
quelle
3
Bitte geben Sie einen Kontext für Ihre Antwort an.
Matthieu Brucher