2015-10-07 4 views
2

Ниже приведен мой сценарий, хотя я достиг желаемого результата, но хочу, чтобы он был достойным и оптимизированным кодом.Создайте список, разделенный запятой, используя StringBuilder

String arr[]={"we","er","rtt","yu","uu","ii"}; 

     StringBuilder strcat = new StringBuilder(); 

     for(int i1=0;i1<arr.length;i1++) 
     { 
      // Some processing 
     strcat.append(arr[i1]); 

     if(arr.length-1!=i1) 
     { 

       strcat.append(","); 
     } 
     } 

    System.out.println("Value:"+strcat); 

У меня есть String[] массива и некоторая обработка, после обработки я хочу добавить значения с запятой (,). проблема - это запятая, она добавляет и к последним значениям, которые я не хочу, я применил логику. Я не знаю, правильно ли это. Но вывод правильный. Пожалуйста, исправьте меня, если я ошибаюсь и предлагаю, если у него есть другие средства для достижения.

+1

Можно ли использовать стороннюю библиотеку? Какова ваша версия JDK? – SMA

+0

Мне это нужно в чистом java .. без каких-либо других библиотек –

+0

Guava [Joiner] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Joiner.html) класс делает именно это. – allprog

ответ

7

Хороший трюк я узнал здесь

String SEPARATOR = ""; 
for(int i1=0;i1<arr.length;i1++) 
{ 
    // Some processing 
    strcat.append(SEPARATOR); 
    strcat.append(arr[i1]); 
    SEPARATOR = ","; 
} 
+1

Это чертовски умный. :) –

+1

Nice.Очень приятно. –

9

Если вы используете Java 8, там уже поддерживают для этого в String классе

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

приведет к

"we,er,rtt,yu,uu,ii" 
+0

Я использую.java 7 –

+2

@vineeth Пришло время переехать в Java 8 :) – Maroun

+0

@MarounMaroun полностью согласен ... но не всегда возможно на работе ..... grrrr .... –

0

Java 8 потоковое API-интерфейсы позволяют значительно аккуратнее решение:

String result = Arrays.asList(arr).stream().collect(Collectors.joining(",")); 
+0

Поскольку он использует Java 7, это не сработает. И он не рассматривает шаг, в котором элемент массива нуждается в обработке. Однако это было бы моим любимым решением. – hotzst

+1

Это кажется излишним для простой проблемы ... 'String.join() 'кажется намного проще, если мы будем использовать Java8 в любом случае ... – Codebender

+0

Вы можете заменить' Arrays.asList (arr) .stream() 'на' Arrays.stream (arr) ', чтобы получить' Stream ' , –

0

Вы можете сделать это так:

strcat.append(arr[0]); 
for (int iCnt = 1;iCnt <arr.length;++iCnt) { 
    strcat.append(",").append(arr[iCnt]); 
} 
+0

Для этого потребуется дополнительный код для обработки пустого массива. –

0

Два подхода я обычно вижу, является:

  • Append запятая после каждого элемента, а затем удалить последний символ перед использованием результата
  • предварять запятую для всех элементов, кроме первого (проверка проще таким образом, вы можете просто проверить strcat.length() == 0.
0

Вы можете добавить 0-й элемент массива первого (после того, как обеспечить, чтобы размер массива по меньшей мере, 1), а затем добавить запятые перед тем каждый элемент из 1 к длине - 1.

Или вы можете сделать это так, как вы это делаете, а затем удалить последнюю запятую, сократив буфер с помощью StringBuilder.setLength(int).

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