简体   繁体   English

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

[英]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 上使用foldreduce ,因为这些会受到字符串连接问题的影响

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 mapvalueOf组合为无对象数组的字符串字段

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.最好将名称重namenames ,因为它是一个数组。
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.

相关问题 使用 Java 将制表符分隔的字符串转换为逗号分隔的字符串 - Convert tab separated string to comma separated string using Java 在java中将逗号分隔的字符串转换为json - convert a comma separated string to json in java 将逗号分隔的 ArrayList 值转换为字符串 - Java - Convert comma separated ArrayList value to String - Java 如何将包含字符串列表的JsonNode转换为Java中的逗号分隔字符串 - How to convert a JsonNode containing a list of string to a comma separated string in Java 如何转换清单 <String[]> Java中使用逗号分隔字符串(不带“”) - How to Convert List<String[]> to Comma Separated String without “ ” in Java 将 HashMap 转换为字符串逗号分隔 - Convert HashMap to string comma separated 将逗号分隔的字符串转换为 HashSet - Convert comma separated string into a HashSet 如何在java中将字符串数转换为逗号分隔的整数? - How to convert string numbers into comma separated integers in java? Java 8 流:将逗号分隔的字符串转换为抽象枚举列表 - Java 8 stream: convert comma separated string to the list of abstract Enum 如何将包含用逗号分隔的数字的字符串转换为 java 中的 Integer? - How to convert a string containing numbers separated by comma to Integer in java?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM