如何在一行中将数组连接为字符串(Java)?

4
假设有一个数组:
String[] myArray = new String[]{"slim cat", "fat cat", "extremely fat cat"};

现在我想将这个数组转换为一个用"&"连接的字符串。 这样输出就变成了:
slim cat&fat cat&extremely fat cat

我试图保持我的代码更简短和清晰,而不需要手动输入一个 for 循环。

我想要一个简洁的解决方案,就像我们在反向使用 someString.split(); 一样。

我如何实现这个目标?


1
解释为什么不想使用for循环会很有帮助。while循环可以吗?将循环隐藏在一个辅助方法、库或JDK中是否可以接受? - Philipp Reichart
2
如何在没有火柴的情况下点燃火焰? - Maarten Bodewes
6个回答

19

太棒了 :) 我在想为什么这个方法直到Java8才被引入...非常有用。 - Ernestas Gruodis
@ErnestasGruodis 我觉得很多人都有同样的想法。我想知道为什么 Java 仍然 没有一种方法可以让你通过连接另一个字符串或字符 n 次来创建一个字符串,因为这是我经常需要的功能。 - ajb

3

2

编辑:为什么不用for循环?

使用StringBuilder

StringBuilder builder = new StringBuilder();
builder.append( myArray.remove(0));

for( String s : myArray) {
    builder.append( "&");
    builder.append( s);
}

String result = builder.toString();

1
他已明确表示..我如何在不使用for循环的情况下实现这一点? - User27854
我们有一个简单的方法来反转它:someString.split();。所以我认为创建由数组生成的分词化字符串应该也有一些非常简单的方法。 - Ernestas Gruodis

1
您可以使用Arrays.toString(Object[])并重写结果。例如,
String[] myArray = { "slim cat", "fat cat", "extremely fat cat" };
String str = Arrays.toString(myArray).replace(", ", "&");
str = str.substring(1, str.length() - 1);
System.out.println(str);

输出结果如下所请求

瘦猫&胖猫&极其胖的猫

注意,只有在输入中没有", "时(就像这里一样),才能正常工作。


1
聪明的。但是如果", "是其中一个字符串的子串,它就不起作用了。 - ajb
@ajb 已更正。添加了一个注释。 - Elliott Frisch

1

与Java 8(StringJoiner或String.join)相比,Apache Commons的好处在于它是null-safe的。 - hc_dev

0

没有办法在不遍历数组的情况下完成这项工作。即使是那些提供了某种形式的join()函数的语言(不包括Java版本8之前的版本),也必须在内部执行某种形式的迭代。

在Java版本7及以下,最简单的方法如下:

StringBuilder sb = new StringBuilder();
String result;

for (String s : myArray) {
    sb.append(s).append('&');
}
sb.deleteCharAt(sb.length() - 1);

result = sb.toString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接