Что самый изящный путь состоит в том, чтобы связать список значений с разделителем в Java?

Вы попробовали Google Charts API ? - API веб-сервиса действительно не прибывают намного более простые. Это свободно использовать, простой реализовать, и диаграммы не выглядят слишком дрянными.

10
задан Peter Mortensen 2 December 2012 в 10:38
поделиться

7 ответов

Вот моя версия: Уловки Java: самый быстрый способ сбора объектов в строке

StringBuilder buffer = new StringBuilder ();
String delim = "";
for (Object o: list)
{
    buffer.append (delim);
    delim = ", "; // Avoid if(); assignment is very fast!
    buffer.append (o);
}
buffer.toString ();

В качестве дополнительного бонуса: если ваш код в цикле более сложен, то этот подход даст правильные результаты без сложных if () s.

Также обратите внимание, что с современными процессорами присвоение будет происходить только в кэше (или, возможно, только в регистре).

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

10
ответ дан 3 December 2019 в 16:10
поделиться

Using Guava's (formerly google-collections) joiner class:

Joiner.on(",").join(list)

Done.

11
ответ дан 3 December 2019 в 16:10
поделиться
StringBuilder builder = new StringBuilder();
for (String st: list) {
    builder.append(st).append(',');
}
builder.deleteCharAt(builder.length());
String result = builder.toString();

Не используйте "+" для контасенации строк. Это медленно.

3
ответ дан 3 December 2019 в 16:10
поделиться

Посмотрите здесь:

http://snippets.dzone.com/posts/show/91

для полного обсуждения этой темы.

2
ответ дан 3 December 2019 в 16:10
поделиться

Я бы использовал StringBuffer для реализации этой функции. Строка является неизменной, поэтому каждый раз, когда вы объединяете две String s, создается новый объект.

Более эффективным является использование StringBuffer :

String[] list = new String[] {"abc","def","ghi","jkl"};
StringBuffer str = new StringBuffer();
for (String s : list) {
   str.append(s);
   str.append(",");
}
str.deleteCharAt(str.length());
System.out.println(str); //automatically invokes StringBuffer.toString();
-1
ответ дан 3 December 2019 в 16:10
поделиться

I'd bet that there are several classes named "StringUtil", "StringsUtil", "Strings" or anything along those lines on the classpath of any medium sized Java project. Most likely, any of them will provide a join function. Here are some examples I've found in my project:

org.apache.commons.lang.StringUtils.join(...)
org.apache.wicket.util.string.Wicket.join(...)
org.compass.core.util.StringUtils.arrayToDelimitedString(...)

As you might want to get rid of some external dependencies in the future, you may want to to something like this:

public static final MyStringUtils {
    private MyStringUtils() {}

    public static String join(Object[] list, String delim) {
        return org.apache.commons.lang.StringUtils.join(list, delim);
    }
}

Now that's what I call "elegant" ;)

2
ответ дан 3 December 2019 в 16:10
поделиться
for (int i = 0; i < list.length-1; i++) {
    str = str + list[i];
    str = str + ",";    
}
str = str + list[list.length-1] 
-1
ответ дан 3 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: