我有一个数组列表,我想把它完全输出为字符串。本质上,我想使用每个元素的toString按顺序输出它,每个元素由制表符分隔。有什么快速的方法吗?你可以循环遍历它(或删除每个元素),并将它连接到一个字符串,但我认为这将是非常缓慢的。


当前回答

这是一个相当老的问题,但我想我不妨添加一个更现代的答案-使用来自Guava的Joiner类:

String joined = Joiner.on("\t").join(list);

其他回答

下面的代码可以帮助你,

List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
String str = list.toString();
System.out.println("Step-1 : " + str);
str = str.replaceAll("[\\[\\]]", "");
System.out.println("Step-2 : " + str);

输出:

Step-1 : [1, 2, 3]
Step-2 : 1, 2, 3

循环遍历它并调用toString。没有什么神奇的方法,如果有的话,你认为它在被子下面除了循环之外会做什么?唯一的微优化是使用StringBuilder而不是String,即使这也不是一个巨大的胜利-连接字符串在幕后变成了StringBuilder,但至少如果您以这种方式编写它,您可以看到正在发生什么。

StringBuilder out = new StringBuilder();
for (Object o : list)
{
  out.append(o.toString());
  out.append("\t");
}
return out.toString();

对于这个简单的用例,您可以简单地用逗号连接字符串。如果你使用Java 8:

String csv = String.join("\t", yourArray);

否则common -lang有一个join()方法:

String csv = org.apache.commons.lang3.StringUtils.join(yourArray, "\t");

也许不是最好的方式,但却是优雅的方式。

Arrays.deepToString (arrays . aslist(“测试”,“Test2”)

import java.util.Arrays;

    public class Test {
        public static void main(String[] args) {
            System.out.println(Arrays.deepToString(Arrays.asList("Test", "Test2").toArray()));
        }
    }

输出

(测试,Test2)

在Java 8中,这很简单。参见整数列表的示例:

String result = Arrays.asList(1,2,3).stream().map(Object::toString).reduce((t, u) -> t + "\t" + u).orElse("");

或者多行版本(更容易阅读):

String result = Arrays.asList(1,2,3).stream()
    .map(Object::toString)
    .reduce((t, u) -> t + "\t" + u)
    .orElse("");

更新-一个更短的版本

String result = Arrays.asList(1,2,3).stream()
                .map(Object::toString)
                .collect(Collectors.joining("\t"));