[英]Convert String[] to comma separated string in java
i have one String[]
我有一个
String[]
String[] name = {"amit", "rahul", "surya"};
i want to send name as parameter in sql query inside IN clause so how do i convert into a format我想在 IN 子句中的 sql 查询中将名称作为参数发送,所以我如何转换为格式
'amit','rahul','surya'
Either write a simple method yourself, or use one of the various utilities out there.要么自己编写一个简单的方法,要么使用那里的各种实用程序之一。
Personally I use apache StringUtils ( StringUtils.join )我个人使用 apache StringUtils ( StringUtils.join )
edit: in Java 8, you don't need this at all anymore:编辑:在 Java 8 中,你不再需要这个了:
String joined = String.join(",", name);
Android developers are probably looking for TextUtils.join Android 开发人员可能正在寻找 TextUtils.join
Android docs: http://developer.android.com/reference/android/text/TextUtils.html Android 文档: http://developer.android.com/reference/android/text/TextUtils.ZFC35EDC70D5FC69D5A26
Code:代码:
String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)
Nice and simple: but java8 required!很好很简单:但是需要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();
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 "";
}
You can also use org.apache.commons.lang.StringUtils
API to form a comma separated result from string array in Java.您还可以使用
org.apache.commons.lang.StringUtils
API 从 Java 中的字符串数组形成逗号分隔的结果。
StringUtils.join(strArr,",");
If you already have Spring Framework as a dependency, you could also use the very simple util method:如果您已经将 Spring 框架作为依赖项,您还可以使用非常简单的 util 方法:
org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)
You could also simplify it using the Guava library:您还可以使用 Guava 库对其进行简化:
String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
.replace(",", "','") + "'";
use StringBuilder
and iterate over your String[], and append each String into it:使用
StringBuilder
并遍历您的 String[] 和 append 每个字符串到其中:
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();
}
You can do this with one line of code:你可以用一行代码做到这一点:
Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");
Extention for prior Java 8 solution扩展之前的 Java 8 解决方案
String result = String.join(",", name);
If you need prefix or/ and suffix for array values如果您需要数组值的前缀或/和后缀
StringJoiner joiner = new StringJoiner(",");
for (CharSequence cs: name) {
joiner.add("'" + cs + "'");
}
return joiner.toString();
Or simple method concept或简单的方法概念
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 example例如
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);
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);
}
i use this我用这个
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();
}
USE StringUtils.join
function: Eg使用
StringUtils.join
function:例如
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 );
As tempting and "cool" as the code may appear, do not use fold
or reduce
on large collections of strings, as these will suffer from the string concatenation problem就像代码看起来很诱人和“酷”一样,不要在大的字符串 collections 上使用
fold
或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());
Instead, as per other answers, use String.join()
if you already have a collection, or a StringBuilder
if not.相反,根据其他答案,如果您已经有一个集合,请使用
String.join()
,如果没有,则使用StringBuilder
。
You may also want not to spawn StringBuilder for such simple operation.您可能还不想为这种简单的操作生成 StringBuilder。 Please note that I've changed name of your array from name to names for sake of content conformity:
请注意,为了内容的一致性,我已将您的数组的名称从名称更改为名称:
String[] names = {"amit", "rahul", "surya"};
String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";
Two lines (excluding declarations; 'finalstring' should be initially declared equal to an empty string), if you don't care a lot about vertically spacing the for() loop:两行(不包括声明;'finalstring' 最初应声明为等于空字符串),如果您不太关心垂直间隔 for() 循环:
for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);
Two lines, you're done.两行,你就完成了。 :)
:)
here is a Utility method to split an array and put your custom delimiter, using这是一个实用方法来拆分数组并放置您的自定义分隔符,使用
String.replace(String,String)
Arrays.toString(Object[])
here it is:这里是:
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;
}
change the second argument type to suite your array type更改第二个参数类型以适应您的数组类型
This would be an optimized way of doing it这将是一种优化的方式
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();
In java 8 for none string array and none primitive object (Long, Integer, ...)在 java 8 中,无字符串数组和无原始 object(长,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)在 java 8 中,用于对象数组的特定字段(例如具有 2 个字段颜色和速度的汽车)
List<Car> cars= Cars.asList(car1, cars2,car3);
cars.stream().map(Car::getColor).collect(Collectors.joining(","))))
Combine map
with valueOf
for none String field of an array of objects map
与valueOf
组合为无对象数组的字符串字段
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] + "\'";
}
}
Better rename name
to names
since its an Array.最好将名称重
name
为names
,因为它是一个数组。
Java 8+ solution, taking into: Java 8+解决方案,考虑:
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)
This my be helpful!!!这对我有帮助!!!
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.