Convertir la chaîne [] en chaîne séparée par des virgules en java

109

j'en ai un String[]

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

Je veux envoyer le nom en tant que paramètre dans la requête SQL à l'intérieur de la clause IN, alors comment puis-je convertir en un format

'amit','rahul','surya'
Deepak Kumar
la source
18
Qu'en est-ilString[] name = {"O'Neill"};
Bart Kiers

Réponses:

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
la source
10
Ensuite, j'aurais fait un tas de chèques. J'explique simplement le concept, sans donner l'exemple de sauvegarde de tout.
Nico Huysamen
3
Encore une fois, les concepts ... Et merci pour le vote défavorable. Mais là vous allez, réparé.
Nico Huysamen
merci mon pote, vous me sauvez la journée, mais si cela ne vous dérange pas, pouvez-vous également donner la réponse de @Bart Kiers car je pourrais avoir cette situation et je suis nouveau dans la programmation plz
Deepak Kumar
7
Ohhh, pourquoi il est nécessaire d'écrire autant de lignes source si vous pouvez simplement utiliser String.join(...)ou TextUtils.join(...)?
Eugene Brusov
2
@EugeneBrusov Je vais aller deviner car la réponse postée en 2011 bien avant la sortie de Java 8;)
Nico Huysamen
211

Écrivez vous-même une méthode simple ou utilisez l'un des divers utilitaires disponibles.

Personnellement, j'utilise apache StringUtils ( StringUtils.join )

edit: en Java 8, vous n'en avez plus besoin du tout:

String joined = String.join(",", name);
Joeri Hendrickx
la source
3
Exactement! Vous pouvez même définir vos propres délimiteurs:StringUtils.join(names,',');
insanity
5
String list = "'" + StringUtils.join(names,"','") + "'";cela vous donnerait les guillemets simples nécessaires à la requête SQL.
haysclark
Pour Android:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani
51

Sympa et simple: mais java8 requis!

String result = String.join(",", names);
Christopher Perry
la source
47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();
NPE
la source
1
@Bmoeller Avez-vous essayé TextUtils.join(...)? Je suppose que le code d'une ligne est encore meilleur et plus simple que cinq autres.
Eugene Brusov
27

Vous pouvez également utiliser l' org.apache.commons.lang.StringUtilsAPI pour former un résultat séparé par des virgules à partir d'un tableau de chaînes en Java.

StringUtils.join(strArr,",");

user797649
la source
9

Si vous avez déjà Spring Framework en tant que dépendance, vous pouvez également utiliser la méthode util très simple:

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

Vous pouvez également le simplifier en utilisant la bibliothèque Guava:

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";
acvcu
la source
Comment utiliser la bibliothèque Guava où la sortie est "amit,rahul,surya":?
Compaq LE2202x
5

utilisez StringBuilderet itérez sur votre chaîne [], et ajoutez-y chaque chaîne:

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
la source
4

Vous pouvez le faire avec une seule ligne de code:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");
nullbyte
la source
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
la source
2
Vous vouliez probablement dire substring(1), mais et si array.length == 0?
Bart Kiers
2

j'utilise ça

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
la source
1

StringUtils.joinFonction USE : Par exemple

String myCsvString = StringUtils.join(myList, ",")
Manu
la source
1
Pourquoi publier une réponse qui a déjà été publiée plusieurs fois?
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
la source
Veuillez ajouter une description de ce que fait exactement votre code.
Hille
Conversion de la chaîne [] en chaîne séparée par des virgules
Vinayak
Dans votre réponse, parce que le droit sait qu'il y a du code. Rien de plus et rien de moins, mais ce n'est pas utile.
Hille
1

Aussi tentant et «cool» que le code puisse paraître, ne pas utiliser foldoureduce sur de grandes collections de chaînes, car elles souffriront du problème de concaténation de chaînes

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

Au lieu de cela, comme pour les autres réponses, utilisez String.join()si vous avez déjà une collection, ou StringBuildersi non.

StuartLC
la source
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
la source
0

Vous pouvez également ne pas générer StringBuilder pour une opération aussi simple. Veuillez noter que j'ai changé le nom de votre tableau de nom en noms par souci de conformité du contenu:

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

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

Deux lignes (à l'exclusion des déclarations; 'finalstring' doit être initialement déclaré égal à une chaîne vide), si vous ne vous souciez pas beaucoup de l'espacement vertical de la boucle for ():

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

Deux lignes, vous avez terminé. :)

Matt Campbell
la source
0

voici une méthode utilitaire pour diviser un tableau et mettre votre délimiteur personnalisé, en utilisant

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

C'est ici :

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

changez le deuxième type d'argument pour convenir à votre type de tableau

Ahmed Adel Ismail
la source
0

Ce serait une façon optimisée de le faire

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
la source
0

Extension pour la solution Java 8 antérieure

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

Si vous avez besoin d'un préfixe ou / et d'un suffixe pour les valeurs de tableau

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

Ou concept de méthode simple

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

Par exemple

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);
Volatil
la source
-1

C'est mon être utile !!!

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
la source
3
Veuillez fournir un contexte à votre réponse.
Matthieu Brucher