eu tenho um String[]
String[] name = {"amit", "rahul", "surya"};
Eu quero enviar o nome como parâmetro na consulta sql dentro da cláusula IN, então como faço para converter em um formato
'amit','rahul','surya'
eu tenho um String[]
String[] name = {"amit", "rahul", "surya"};
Eu quero enviar o nome como parâmetro na consulta sql dentro da cláusula IN, então como faço para converter em um formato
'amit','rahul','surya'
Respostas:
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 "";
}
String.join(...)ou TextUtils.join(...)?
Escreva um método simples você mesmo ou use um dos vários utilitários por aí.
Pessoalmente, eu uso o apache StringUtils ( StringUtils.join )
editar: no Java 8, você não precisa mais disso:
String joined = String.join(",", name);
StringUtils.join(names,',');
String list = "'" + StringUtils.join(names,"','") + "'";isso forneceria as aspas simples necessárias para a solicitação SQL.
TextUtils.join(",", stringArrayOfEmails)
Os desenvolvedores Android provavelmente estão procurando por TextUtils.join
Documentos Android: http://developer.android.com/reference/android/text/TextUtils.html
Código:
String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)
Bom e simples: mas requer java8!
String result = String.join(",", names);
StringBuilder sb = new StringBuilder();
for (String n : name) {
if (sb.length() > 0) sb.append(',');
sb.append("'").append(n).append("'");
}
return sb.toString();
TextUtils.join(...)? Acho que um código de linha é ainda melhor e mais simples do que cinco.
Você também pode usar a org.apache.commons.lang.StringUtilsAPI para formar um resultado separado por vírgula da matriz de string em Java.
StringUtils.join(strArr,",");
Você também pode simplificar usando a biblioteca Guava:
String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
.replace(",", "','") + "'";
"amit,rahul,surya":?
use StringBuildere itere sobre sua String [] e anexe cada String nela:
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();
}
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);
}
substring(1), mas e se array.length == 0?
StringUtils.joinFunção USE : Ex.
String myCsvString = StringUtils.join(myList, ",")
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 );
Por mais tentador e "legal" que o código possa parecer, não use foldoureduce em grandes coleções de strings, pois estas sofrerão com o problema de concatenação de strings
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());
Em vez disso, como para outras respostas, use String.join()se você já tiver uma coleção, ou StringBuilderse não tiver.
Você também pode querer não gerar StringBuilder para uma operação tão simples. Observe que alterei o nome da sua matriz de nome para nomes por uma questão de conformidade do conteúdo:
String[] names = {"amit", "rahul", "surya"};
String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";
Duas linhas (excluindo as declarações; 'finalstring' deve ser inicialmente declarada igual a uma string vazia), se você não se importar muito com o espaçamento vertical do loop for ():
for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);
Duas linhas, está feito. :)
aqui está um método utilitário para dividir uma matriz e colocar seu delimitador personalizado, usando
String.replace(String,String)
Arrays.toString(Object[])
Aqui 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;
}
mude o segundo tipo de argumento para se adequar ao seu tipo de array
Extensão para solução anterior Java 8
String result = String.join(",", name);
Se você precisar de um prefixo ou / e sufixo para valores de matriz
StringJoiner joiner = new StringJoiner(",");
for (CharSequence cs: name) {
joiner.add("'" + cs + "'");
}
return joiner.toString();
Ou conceito de método simples
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 exemplo
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);
Isso pode 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();
}
String[] name = {"O'Neill"};