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'
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'
Câu trả lời:
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(...)hoặc TextUtils.join(...)?
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);
StringUtils.join(names,',');
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.
TextUtils.join(",", stringArrayOfEmails)
Các nhà phát triển Android có lẽ đang tìm kiếm TextUtils.join
Tài liệu Android: http://developer.android.com/reference/android/text/TextUtils.html
Mã:
String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)
Đẹp và đơn giản: nhưng cần có 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(...)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ã.
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,",");
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(",", "','") + "'";
"amit,rahul,surya":?
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();
}
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), nhưng nếu điều gì xảy ra array.length == 0?
StringUtils.joinHàm SỬ DỤNG : VD
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 );
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ó.
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 + "'";
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. :)
đâ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
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);
Đ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();
}
String[] name = {"O'Neill"};