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'

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

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

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



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


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)

7

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

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

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

4

Sie können dies mit einer Codezeile tun:

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

1

USE- StringUtils.joinFunktion: ZB

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

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

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.


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

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 + "'";

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. :) :)


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


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

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

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

3
Bitte geben Sie einen Kontext für Ihre Antwort an.
Matthieu Brucher
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.