Каков лучший способ добавить запятые к выводу нескольких элементов строки? - PullRequest
2 голосов
/ 14 марта 2012

Мне нужно поместить значения через запятую в ourOutput (для будущего вывода).Итак, мне нужно добавить запятые и удалить последнюю ненужную запятую или проверить, нужно ли ставить запятую.

Я пришел к двум следующим решениям:

1-й подход:

ourOutput  = ''<<'';
for (int i = 0; i< 10, i++) {
  if (/*some condition goes here*/) {
    if (ourOutput.size() == 0) {
      ourOutput << ', '
    } 
    ourOutput << i;
  }
}

плюсы: не изменять результирующие строки минусы: проверка на каждую итерацию;

2-й подход:

ourOutput  = ''<<'';
for (int i = 0; i< 10, i++) {
  if (/*some condition goes here*/) {
    ourOutput << i << ', ';
  }
}
if (ourOutput.size() != 0) {
  ourOutput.setLength(ourOutput.length() - 2);
} 

плюсы: не проверять каждый раз минусы: изменение результирующей строки.

Посоветуйте, пожалуйста, какой из них использовать, или, может быть, есть какой-нибудь лучший способ сделать это?

ps код, написанный на groovy, не стесняйтесь заменить '' << '' на <code>new StringBuilder()и << с .append(), поэтому он стал java-компилируемым.

Ответы [ 6 ]

5 голосов
/ 14 марта 2012

Есть отличная библиотека, чтобы помочь вам с этим, Commons Lang StringUtils

StringUtils.join(C, ",");

, где C может быть коллекцией, массивом или итератором.

3 голосов
/ 14 марта 2012

Поскольку это Groovy-код, кратким решением является сохранение каждого элемента в списке, а затем присоединение к списку для создания разделенной запятыми строки, например,

List ourOutput = []

for (int i = 0; i < 10, i++) {
  if (/*some condition goes here*/) {
    ourOutput << i
  }
}

String commaSeparated = ourOutput.join(',')
3 голосов
/ 14 марта 2012

Если это классно, почему бы просто не сделать:

String ourOutput = (0..9).join( ',' )
3 голосов
/ 14 марта 2012

В библиотеке lang Apache Commons есть хороший метод для этого:

StringUtils.join(java.util.Collection,char)
1 голос
/ 14 марта 2012

Вы можете выполнить эту задачу в два этапа:

  • split String переменная один на один (это означает: test == >> String {"t", "e", "s", "t"})
  • Результат объединения массива на шаге выше Apache Commons Lang3

Я пишу служебный метод для этой задачи:

public static String join(String src, String separator)
{
        String[] array = src.split("\\.?");

        String newString = StringUtils.join(array, separator);
        String finalResult = newString.substring(1, newString.length());

        System.out.println(finalResult);

        return finalResult;
}

если вы выполните этот метод с двумя аргументами как TEST и ,, вы увидите следующий вывод в консоли:

T,E,S,T

Надеюсь, мой ответ будет вам полезен.

0 голосов
/ 14 марта 2012

Вы можете использовать следующий метод для добавления разделителя в любой массив.

Определение joinSeparator ()

public static String joinSeparator(Object[] array, char separator) {
        if (array == null) {
            return null;
        }

        int startIndex = 0;
        int endIndex = array.length;

        int bufSize = (endIndex - startIndex);
        if (bufSize <= 0) {
            return null;
        }

        bufSize *= ((array[startIndex] == null ? 16 : array[startIndex]
                .toString().length()) + 1);
        StringBuffer buf = new StringBuffer(bufSize);

        for (int i = startIndex; i < endIndex; i++) {
            if (i > startIndex) {
                buf.append(separator);
            }
            if (array[i] != null) {
                buf.append(array[i]);
            }
        }
        return buf.toString();
    }

Вызовите метод joinSeparator ()

String[] array = {"sunil", "kumar", "sahoo"};
    joinSeparator(array, ',');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...