2014-12-20 2 views
2

У меня есть Vector<String>, содержащий некоторые элементы. Я хочу искать эти элементы в базе данных.Как преобразовать векторные элементы в разделенные запятой Строка

Для этого мне нужно создать строку, состоящую из элементов, разделенных запятыми, из этого Vector, так что я могу передать его SQL Query.

Я делаю что-то вроде этого.

StringBuilder list = new StringBuilder(""); 
     for (String items : itemList) { 
      if(its last element then) //How to check here 
      list.append(items); 
      else  
      list.append(items+","); 
     } 

но вернет мне выход как "item1,item2,item3,"

, где, как я хочу, чтобы опустить последний comma (,) в случае, если это последний элемент вектора.

Я проверил Vector API и нашел этот метод lastElement() (который возвращает последний элемент не boolean).

Как я могу проверить это в цикле или есть ли более умный/эффективный способ сделать это?

+0

если (items.equals (vector.lastElement()) {\\ DonT добавить запятую здесь} – user

+0

Если вы можете использовать Java 8, а затем посмотреть на [ 'string.join () '] (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.CharSequence...-). – Tom

+0

@user вместо сравнения каждого элемента in for loop со строкой типа aaaaaa в случае вектора типа {a, aa, aaaa, aaaaaa} не будет эффективным. – SMA

ответ

0

Изменение цикла, как показано ниже:

for (int i=0; i<itemList.size(); i++) { 
    list.append(itemList.get(i)); 
    if(i != itemList.size() - 1) { 
     list.append(",");   
    } 

Внутренне вектор использует массив и вы обращаетесь к элементу по индексу теперь вместо того, чтобы использовать заранее для каждого цикла.

1

Посмотрите библиотеки, как Google гуавы

Joiner.on(",").useForNull("null").join(itemList) 
2

Это возможно дубликат Java: function for arrays like PHP's join()?

Не изобретайте колесо! Это было сделано много раз, тестирование и обслуживание. поэтому используйте их, не делайте свои собственные.

Вы можете использовать Apache CommonsStringUtils и использовать метод join на Iterable (который Vector есть)

StringUtils.join(itemList, ", ") 

Кроме того, как отметил Том в комментариях к вопросу, в Java 8 вы можете использовать String.join()

0

Есть несколько библиотек сторонних производителей, которые делают тяжелую работу за вас, как Apache Commons Lang «s StringUtils:

String list = StringUtils.join(items, ','); 

Если вы абсолютно необходимо сделать это самостоятельно, я хотел бы начать с первого элемента и добавить запятую и элемент для каждого последующего элемента:

StringBuilder list = new StringBuilder(); 
Iterator<String> iter = items.iterator(); 

if (iter.hasNext()) { 
    // Special treatment for the first item 
    list.append(iter.next()); 

    // The rest of the items 
    while (iter.hasNext()) { 
     list.append(',').append(iter.next()); 
    } 
} 
1

Поскольку вы используете StringBuilder, это проще просто удалить последнюю запятую:

StringBuilder list = new StringBuilder(""); 
    for (String items : itemList) { 
     list.append(items).append(','); 
    } 
    if (list.length() > 0) { 
     list.setLength(list.length() - 1); 
    } 
1

Я пошел бы с string.join подхода.

final List<String> itemList = Arrays.asList("item1", "item2", "item3"); 
final String commaSeparated = String.join(",", itemList); 
System.out.println(commaSeparated); // -> item1,item2,item3 

Хорошее и чистое решение. Доступно только для Java 8.

+2

если он использует java 8 –

+0

Спасибо, Марк, я обновил ответ. – wassgren

-1

Просто используйте,

StringUtils.join(itemList, ", "); 
+2

это решение уже было предложено дважды, и в обоих других примерах они фактически связывают e сайт, который вы можете получить от этого. –

Смежные вопросы