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'

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

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

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



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


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)

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

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

4

Vous pouvez le faire avec une seule ligne de code:

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

1

StringUtils.joinFonction USE : Par exemple

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

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

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.


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

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

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


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


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

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

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

3
Veuillez fournir un contexte à votre réponse.
Matthieu Brucher
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.