在 java 中将 String []转换为逗号分隔的字符串

我有一个 String[]

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

我想在 IN 子句内的 sql 查询中将 name 作为参数发送 那么我如何转换成一种格式

'amit','rahul','surya'
188286 次浏览

使用 StringBuilder并在 String []上迭代,并将每个 String 附加到它:

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();
}
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[] 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);
}
StringBuilder sb = new StringBuilder();
for (String n : name) {
if (sb.length() > 0) sb.append(',');
sb.append("'").append(n).append("'");
}
return sb.toString();
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] + "\'";
}
}

要么自己编写一个简单的方法,要么使用其他各种实用程序之一。

我个人使用 apache StringUtils (StringUtils.join)

编辑: 在 Java8中,您不再需要它了:

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

对于这样的简单操作,您可能也不希望产生 StringBuilder。请注意,为了内容一致性,我已经将您的数组名称从 name改为 名字:

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


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

你也可以使用番石榴图书馆来简化它:

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

两行(不包括声明; ‘ finalstring’最初应该声明为等于一个空字符串) ,如果您不太关心 for ()循环的垂直间距:

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

两句台词,你完成了。 :)

如果您已经将 Spring Framework 作为一个依赖项,那么您还可以使用非常简单的 util 方法:

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

很好很简单: 但是需要 java8!

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

下面是一个实用工具方法,用于拆分数组并放置自定义分隔符

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

就是这个:

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

更改第二个参数类型以适应数组类型

还可以使用 org.apache.commons.lang.StringUtilsAPI 在 Java 中形成与字符串数组分隔的逗号结果。

StringUtils.join(strArr,",");

这将是一个优化的方式来做到这一点

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

我用这个

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

Android developers are probably looking for TextUtils.join

Android 文档: http://developer.android.com/reference/android/text/TextUtils.html

密码:

String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)

使用 StringUtils.join函数: 例如。

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

你可以用一行代码来完成:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");
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 );

尽管代码看起来很吸引人、很“酷”,但 不要使用 ABC0或 reduce对大量字符串集合的影响很大,因为这些字符串会受到 字符串串联问题字符串串联问题的影响

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

相反,根据其他答案,如果您已经有一个集合,则使用 String.join(),如果没有,则使用 StringBuilder

这对我有帮助! ! !

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

先前 Java8解决方案的扩展

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

如果数组值需要前缀或/和后缀

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

或者简单的方法概念

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

比如说

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

在 java8中,对于无字符串数组和无基本对象(Long,Integer,...)

List<Long> ids = Arrays.asList(1l, 2l,3l);
ids.stream().map(String::valueOf).collect(Collectors.joining(","))))

In java 8 for specific field of an objets array (example a car with 2 fields color and speed)

List<Car> cars= Cars.asList(car1, cars2,car3);
cars.stream().map(Car::getColor).collect(Collectors.joining(","))))

mapvalueOf组合用于对象数组的 none String 字段

最好将 name重命名为 names,因为它是一个数组。
Java 8+ solution, taking into :

String[] names = {"amit", "rahul", "surya","O'Neil"};
// For each name:
// single quote with another single quote
// & put single quotes around
// & add comma at end
String sql = Stream.<String>of(names)
.reduce("", (acc,s)-> acc + "'" + s.replaceAll("'","''") + "',")
// Remove last trailing comma
sql = sql.substring(0, sql.length()-1)