Chuyển đổi chuỗi [] thành chuỗi được phân tách bằng dấu phẩy trong java


109

tôi có một String[]

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

tôi muốn gửi tên dưới dạng tham số trong truy vấn sql bên trong mệnh đề IN, vậy làm cách nào để chuyển đổi thành định dạng

'amit','rahul','surya'

18
Còn vềString[] name = {"O'Neill"};
Bart Kiers,

Câu trả lời:


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

10
Sau đó, tôi sẽ viết một loạt các chi phiếu. Tôi chỉ giải thích khái niệm, không đưa ra ví dụ về lưu tất cả.
Nico Huysamen

3
Một lần nữa, các khái niệm ... Và cảm ơn vì đã bỏ phiếu xuống. Nhưng bạn đã đi, đã sửa nó.
Nico Huysamen,

nhờ bạn thân giúp bạn tiết kiệm ngày của tôi, nhưng nếu bạn không nhớ có thể bạn cũng cung cấp cho các câu trả lời của @Bart Kiers, vì tôi có thể nhận được tình hình đó và tôi mới để lập trình plz
Deepak Kumar

7
Ohhh, tại sao cần phải viết nhiều dòng nguồn như vậy nếu bạn chỉ có thể sử dụng String.join(...)hoặc TextUtils.join(...)?
Eugene Brusov

2
@EugeneBrusov Tôi sẽ đi và đoán vì câu trả lời được đăng vào năm 2011 rất lâu trước khi phát hành Java 8;)
Nico Huysamen

211

Bạn có thể tự viết một phương thức đơn giản hoặc sử dụng một trong các tiện ích khác nhau trên mạng.

Cá nhân tôi sử dụng apache StringUtils ( StringUtils.join )

chỉnh sửa: trong Java 8, bạn không cần điều này nữa:

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

3
Chính xác! Bạn thậm chí có thể định nghĩa delimiters riêng bạn:StringUtils.join(names,',');
điên loạn

5
String list = "'" + StringUtils.join(names,"','") + "'";điều này sẽ cung cấp cho bạn các dấu nháy đơn cần thiết theo yêu cầu SQL.
haysclark

Đối với Android:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani



47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();

1
@Bmoeller Bạn đã thử TextUtils.join(...)chưa? Tôi đoán một mã dòng thậm chí còn tốt hơn và đơn giản hơn năm mã.
Eugene Brusov

27

Bạn cũng có thể sử dụng org.apache.commons.lang.StringUtilsAPI để tạo kết quả được phân tách bằng dấu phẩy từ mảng chuỗi trong Java.

StringUtils.join(strArr,",");


9

Nếu bạn đã có Spring Framework làm phụ thuộc, bạn cũng có thể sử dụng phương pháp sử dụng rất đơn giản:

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

7

Bạn cũng có thể đơn giản hóa nó bằng cách sử dụng thư viện Guava:

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

Làm cách nào để sử dụng thư viện Guava nơi đầu ra là "amit,rahul,surya":?
Compaq LE2202x

5

sử dụng StringBuildervà lặp qua Chuỗi [] của bạn và nối từng Chuỗi vào đó:

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

4

Bạn có thể làm điều này với một dòng mã:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");

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

2
Bạn có thể muốn nói substring(1), nhưng nếu điều gì xảy ra array.length == 0?
Bart Kiers

2

tôi sử dụng cái này

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

1

StringUtils.joinHàm SỬ DỤNG : VD

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

1
Tại sao phải đăng một câu trả lời mà trước đó đã được đăng nhiều lần?
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 );

Vui lòng thêm mô tả về những gì mã của bạn đang hoạt động chính xác.
Hille

Chuyển đổi String [] để dấu phẩy tách chuỗi
Vinayak

Trong câu trả lời của bạn, bởi vì quyền biết có một số mã. Không hơn không kém, nhưng không có ích gì.
Hille

1

Vì hấp dẫn và "mát mẻ" như mã có thể xuất hiện, không sử dụng foldhoặcreduce trên các bộ sưu tập chuỗi lớn, vì chúng sẽ gặp phải sự cố nối chuỗi

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

Thay vào đó, theo các câu trả lời khác, hãy sử dụng String.join()nếu bạn đã có bộ sưu tập hoặc StringBuildernếu chưa có.


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] + "\'";
    }
}

0

Bạn cũng có thể không muốn sinh ra StringBuilder cho hoạt động đơn giản như vậy. Xin lưu ý rằng tôi đã thay đổi tên mảng của bạn từ tên sang tên vì lợi ích phù hợp về nội dung:

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

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

0

Hai dòng (không bao gồm khai báo; 'finalstring' ban đầu nên được khai báo bằng một chuỗi trống), nếu bạn không quan tâm nhiều đến khoảng cách theo chiều dọc của vòng lặp for ():

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

Hai dòng, bạn đã hoàn thành. :)


0

đây là một phương pháp Tiện ích để tách một mảng và đặt dấu phân cách tùy chỉnh của bạn, sử dụng

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

nó đây:

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

thay đổi kiểu đối số thứ hai để phù hợp với kiểu mảng của bạn


0

Đây sẽ là một cách tối ưu hóa để làm điều đó

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

0

Mở rộng cho giải pháp Java 8 trước đó

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

Nếu bạn cần tiền tố hoặc / và hậu tố cho các giá trị mảng

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

Hoặc khái niệm phương pháp đơn giản

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

Ví dụ

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

-1

Điều này của tôi rất hữu ích !!!

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

3
Vui lòng cung cấp một số ngữ cảnh cho câu trả lời của bạn.
Matthieu Brucher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.