Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,通过流将字符串数组通过两个不同的分隔符连接起来的一种优雅方法_Java - Fatal编程技术网

在java中,通过流将字符串数组通过两个不同的分隔符连接起来的一种优雅方法

在java中,通过流将字符串数组通过两个不同的分隔符连接起来的一种优雅方法,java,Java,我们可以使用String.join通过分隔符连接字符串列表 我现在的问题是我有一个字符串数组 e、 g 我想用冒号连接a&b,c&d,e&f,并在这些对之间加空格 像 有没有一种优雅的方法可以做到这一点 后续行动: 如果使用嵌套在另一个循环中的循环执行此操作,则在池中创建大量字符串变量,这在Java 8中看起来不太好,您可以将它们流式传输到字符串连接收集器。只需对“内部”数组执行此操作,然后再对结果执行此操作 String[][] stringsss = new String[][] {

我们可以使用
String.join
通过分隔符连接字符串列表

我现在的问题是我有一个字符串数组

e、 g

我想用冒号连接
a&b,c&d,e&f
,并在这些对之间加空格

有没有一种优雅的方法可以做到这一点

后续行动:


如果使用嵌套在另一个循环中的循环执行此操作,则在池中创建大量字符串变量,这在Java 8中看起来不太好,您可以将它们流式传输到字符串连接收集器。只需对“内部”数组执行此操作,然后再对结果执行此操作

String[][] stringsss = new String[][] {
    {"a", "b"},
    {"c", "d"},
    {"e", "f"}
};
String result = Arrays.stream(stringsss)
    .map(e -> Arrays.stream(e).collect(Collectors.joining(":")))
    .collect(Collectors.joining(" "));
System.out.println(result);

答案其实没什么不同,你只需要在数组中添加一个循环,你说你想用逗号和空格连接它们,但是你用了一个冒号作为例子。我不understand@Hypino如果使用嵌套在另一个循环中的循环执行此操作,则会在池中创建大量字符串变量,这看起来不是很好。@jthort很抱歉我的输入错误。您可以创建一个连接方法,传递数组和分隔符,然后先在内部数组上调用该方法,在新数组中收集所有结果,然后用新数组调用该方法。我想知道这是否会在字符串池中创建很多我不感兴趣的中间字符串。如果是,有没有更好的方法来避免这种情况?快速查看
java.util.StringJoiner
会发现它在内部使用了
java.lang.StringBuilder
。每个“内部”数组得到一个中间结果,然后是最终结果。如果你想要一个更有效的方法,你必须使用循环。然后你可以自己控制缓冲。好的。谢谢你的回答。我知道我们可以使用两个嵌套的StringBuilder来实现,但我不喜欢从第一个StringBuilder生成的中间字符串:p
a:b c:d e:f
String[][] stringsss = new String[][] {
    {"a", "b"},
    {"c", "d"},
    {"e", "f"}
};
String result = Arrays.stream(stringsss)
    .map(e -> Arrays.stream(e).collect(Collectors.joining(":")))
    .collect(Collectors.joining(" "));
System.out.println(result);