最优雅的方式是将分隔符插入List <string> </string>

时间:2012-08-14 20:05:46

标签: java loops

  

可能重复:
  Clearest way to comma-delimit a list (Java)?

我有一个List<String>,我需要将此列表转换为单行,并在此String的{​​{1}}个元素之间插入分隔符,但第一个元素之前和最后一个元素之后的位置除外;

我做了一个这样的循环:

List

我不喜欢删除最后一个令牌句。

那么,哪种方式更优雅呢?

7 个答案:

答案 0 :(得分:10)

不要重新发明轮子...... apache commons-lang libraryStringUtils.join()方法,它完全符合您的要求:

String s = StringUtils.join(list, ";"); // for example

Java 8更新:

在java 8中,String类具有执行您想要的join()方法:

String s = String.join(";", list);

答案 1 :(得分:5)

请查看在Google的Guava Libraries中使用Joiner

String delimitedString = Joiner.on(";").join(list);

答案 2 :(得分:1)

以下是我使用的内容,用C#编写,但你应该能够弄明白......

public static string DelimitList<T>(List<T> list, string delimiter)
{
    if (list == null || list.Count == 0 || delimiter == null)
    {
        return string.Empty;
    }

    StringBuilder delimitedList = new StringBuilder();
    for (int index = 0; index < list.Count - 1; index++)
    {
        delimitedList.Append(list[index]);
        delimitedList.Append(delimiter);
    }

    delimitedList.Append(list[list.Count - 1]);
    return delimitedList.ToString();
}

答案 3 :(得分:1)

Apache Commons Lang有一个StringUtils类,其中join方法允许您这样做:

StringUtils.join(list, ";");

答案 4 :(得分:1)

你有许多推荐和第三方的图书馆 我的建议是,如果你选择for循环,如果你的代码不需要是线程安全的,那么请改用StringBuilder。它比StringBuffer <{1}}快得多,因为它是unsynchronized

一个例子(仅针对不同的循环):

int len = list.size() - 1;
ListIterator<String> it = list.listIterator();  
StringBuilder sb = new StringBuilder();  
while(it.hasNext() && len-- > 0){  
   sb.append(it.next()).append(";");  
}  
if(it.hasNext()){  
   sb.append(it.next());  
}  

答案 5 :(得分:0)

嗯,它不是更优雅,但你可以检查它是否是第一个条目,否则预先添加分隔符。

boolean isFirst = true;

StringBuffer sb = new StringBuffer();
for (String str : list) {
   if (!isFirst){
       sb.append(';');
   } 
   sb.append(str);
   isFirst = false;
}

答案 6 :(得分:0)

看看如何编写ArrayList.toString(),这可能会有所帮助:

public String toString() {
    Iterator<E> i = iterator();
if (! i.hasNext())
    return "[]";

StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
    E e = i.next();
    sb.append(e == this ? "(this Collection)" : e);
    if (! i.hasNext())
    return sb.append(']').toString();
    sb.append(", ");
}
}
这会激发你的灵感吗?