Convertir String [] en cadena separada por comas en Java

109

tengo uno String[]

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

quiero enviar el nombre como parámetro en la consulta sql dentro de la cláusula IN, entonces, ¿cómo puedo convertir a un formato?

'amit','rahul','surya'
Deepak Kumar
fuente
18
¿Qué pasa conString[] name = {"O'Neill"};
Bart Kiers

Respuestas:

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
fuente
10
Entonces habría escrito un montón de cheques. Solo estoy explicando el concepto, no dando el ejemplo de guardar todo.
Nico Huysamen
3
De nuevo, conceptos ... Y gracias por el voto negativo. Pero ahí lo tienes, lo arregló.
Nico Huysamen
gracias amigo, me salvas el día, pero si no te importa, también puedes dar la respuesta de @Bart Kiers porque podría tener esa situación y soy nuevo en la programación por favor
Deepak Kumar
7
Ohhh, ¿por qué es necesario escribir tantas líneas fuente si simplemente puedes usar String.join(...)o TextUtils.join(...)?
Eugene Brusov
2
@EugeneBrusov Voy a ir y adivinar porque la respuesta se publicó en 2011 mucho antes del lanzamiento de Java 8;)
Nico Huysamen
211

Escriba un método simple usted mismo o use una de las diversas utilidades que existen.

Personalmente uso apache StringUtils ( StringUtils.join )

editar: en Java 8, ya no necesitas esto en absoluto:

String joined = String.join(",", name);
Joeri Hendrickx
fuente
3
¡Exactamente! Incluso puede definir sus propios delimitadores:StringUtils.join(names,',');
insanity
5
String list = "'" + StringUtils.join(names,"','") + "'";esto le daría las comillas simples necesarias para la solicitud SQL.
haysclark
Para Android:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani
51

Agradable y simple: ¡pero se requiere java8!

String result = String.join(",", names);
Christopher Perry
fuente
47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();
NPE
fuente
1
@Bmoeller ¿Lo has probado TextUtils.join(...)? Supongo que un código de línea es incluso mejor y más simple que cinco.
Eugene Brusov
27

También puede usar org.apache.commons.lang.StringUtilsAPI para formar un resultado separado por comas de una matriz de cadenas en Java.

StringUtils.join(strArr,",");

usuario797649
fuente
9

Si ya tiene Spring Framework como dependencia, también puede usar el método util muy simple:

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

También puede simplificarlo usando la biblioteca de Guava:

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";
acvcu
fuente
¿Cómo uso la biblioteca de Guava donde la salida es "amit,rahul,surya":?
Compaq LE2202x
5

use StringBuildere itere sobre su String [], y agregue cada String en él:

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
fuente
4

Puede hacer esto con una línea de código:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");
nullbyte
fuente
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
fuente
2
Probablemente quisiste decir substring(1), pero ¿y si array.length == 0?
Bart Kiers
2

yo uso esto

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
fuente
1

StringUtils.joinFunción USE : Ej.

String myCsvString = StringUtils.join(myList, ",")
Manu
fuente
1
¿Por qué publicar una respuesta que se ha publicado anteriormente varias veces?
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
fuente
Agregue una descripción de lo que hace exactamente su código.
Hille
Conversión de cadena [] en cadena separada por comas
Vinayak
En su respuesta, porque la derecha sabe que hay algún código. Nada más y nada menos, pero no ayuda.
Hille
1

Por muy tentador y "genial" que pueda parecer el código, no utilice foldoreduce en grandes colecciones de cadenas, ya que estas sufrirán el problema de concatenación de cadenas.

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

En cambio, según otras respuestas, use String.join()si ya tiene una colección, o StringBuildersi no.

StuartLC
fuente
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
fuente
0

Es posible que también desee no generar StringBuilder para una operación tan simple. Tenga en cuenta que he cambiado el nombre de su matriz de nombre a nombres en aras de la conformidad del contenido:

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

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

Dos líneas (excluidas las declaraciones; 'finalstring' debe declararse inicialmente igual a una cadena vacía), si no le importa mucho el espaciado vertical del bucle for ():

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

Dos líneas, ya está. :)

Matt Campbell
fuente
0

aquí hay un método de utilidad para dividir una matriz y poner su delimitador personalizado, usando

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

aquí está :

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

cambie el segundo tipo de argumento para adaptarse a su tipo de matriz

Ahmed Adel Ismail
fuente
0

Esta sería una forma optimizada de hacerlo.

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
fuente
0

Extensión para la solución Java 8 anterior

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

Si necesita prefijo o / y sufijo para valores de matriz

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

O concepto de método 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();
  }

Por ejemplo

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);
Volátil
fuente
-1

¡Esto puede ser útil!

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
fuente
3
Proporcione algo de contexto a su respuesta.
Matthieu Brucher