Перетворити String [] у розділений комою рядок у Java


109

У мене є один String[]

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

я хочу надіслати ім'я як параметр у запиті sql всередині IN, так як я конвертую у формат

'amit','rahul','surya'

18
Що проString[] name = {"O'Neill"};
Барт Кіерс

Відповіді:


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
Тоді я б написав купу чеків. Я просто пояснюю концепцію, не наводячи приклад збереження.
Nico Huysamen

3
Знову ж таки, концепції ... І дякую за перемогу. Але там ви йдете, виправте це.
Nico Huysamen

дякую приятелю, ви врятуєте мій день, але якщо ви не заперечуєте, чи можете ви також дати відповідь @Bart Kiers, тому що я можу отримати цю ситуацію, і я новачок у програмуванні PLZ
Deepak Kumar

7
Ох, чому потрібно писати так багато джерельних рядків, якщо ви можете просто використовувати String.join(...)або TextUtils.join(...)?
Євген Брусов

2
@EugeneBrusov Я буду піти і здогадуватися, тому що відповідь розміщена в 2011 році задовго до виходу Java 8;)
Ніко Хуйсамен

211

Або напишіть простий метод самостійно, або скористайтеся однією з різних утиліт там.

Особисто я використовую Apache StringUtils ( StringUtils.join )

редагувати: у Java 8 це вам більше не потрібно:

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

3
Саме так! Ви навіть можете визначити власні роздільники:StringUtils.join(names,',');
божевілля

5
String list = "'" + StringUtils.join(names,"','") + "'";це дасть вам єдині лапки, необхідні для запиту SQL.
haysclark

Для андроїда:TextUtils.join(",", stringArrayOfEmails)
Пратік Бутані



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 Ви пробували TextUtils.join(...)? Я здогадуюсь, що один код рядка навіть кращий і простіший за п'ять.
Євген Брусов

27

Ви також можете використовувати org.apache.commons.lang.StringUtilsAPI для формування результату, відокремленого комою від масиву рядків на Java.

StringUtils.join(strArr,",");


9

Якщо у вас вже є Spring Framework як залежність, ви також можете використовувати дуже простий утилітний метод:

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

7

Ви також можете спростити його за допомогою бібліотеки Guava:

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

Як використовувати бібліотеку Guava де вихід: "amit,rahul,surya"?
Compaq LE2202x

5

скористайтеся StringBuilderі повторіть свою стрічку [] та додайте до неї кожен рядок:

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

Це можна зробити за допомогою одного рядка коду:

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
Ви, мабуть, мали на увазі substring(1), але що робити, якщо array.length == 0?
Барт Кіерс

2

я використовую це

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.joinФункція USE : Напр

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

1
Навіщо публікувати відповідь, який раніше був опублікований кілька разів?
Чарльз Гудвін

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

Додайте опис того, що саме робить ваш код.
Хілл

Перетворення рядка [] у рядок, розділений комами
Vinayak

У вашій відповіді, бо право знає, що є якийсь код. Нічого більше і нічого менше, але це не допоможе.
Хілл

1

Як спокусливий і "класний", як може здатися код, не використовуйте 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());

Натомість, як за іншими відповідями, використовуйте, String.join()якщо у вас вже є колекція, або StringBuilderякщо ні.


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

Можливо, ви також не хочете нерестовувати StringBuilder для такої простої роботи. Зауважте, що я змінив ім'я вашого масиву з імені на ім'я заради відповідності вмісту:

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

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

0

Два рядки (за винятком декларацій; 'finalstring' слід спочатку оголосити рівним порожнім рядком), якщо ви не дуже переймаєтесь вертикальним проміжком циклу for ():

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

Два рядки, ви закінчили. :)


0

ось метод Utility, щоб розділити масив і поставити власний роздільник, використовуючи

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

змінити другий тип аргументу відповідно до типу масиву


0

Це був би оптимізований спосіб зробити це

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

Розширення для попереднього рішення Java 8

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

-1

Це моє бути корисним !!!

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
Укажіть, будь ласка, якийсь контекст вашої відповіді.
Матьє Брюхер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.