使用stream.collect(Collectors.joining(", "))
I,可以轻松地连接流中所有用逗号分隔的字符串。可能的结果是"a, b, c"
。但是,如果我希望最后一个定界符不同,该怎么办。例如," and "
使我得到"a, b and c"
结果。有一个简单的解决方案吗?
如果它们已经在列表中,则不需要流。只需加入除最后一个元素以外的所有元素的子列表,并连接另一个定界符和最后一个元素:
int last = list.size() - 1;
String joined = String.join(" and ",
String.join(", ", list.subList(0, last)),
list.get(last));
这是使用上述功能的版本 Collectors.collectingAndThen:
stream.collect(Collectors.collectingAndThen(Collectors.toList(),
joiningLastDelimiter(", ", " and ")));
public static Function<List<String>, String> joiningLastDelimiter(
String delimiter, String lastDelimiter) {
return list -> {
int last = list.size() - 1;
if (last < 1) return String.join(delimiter, list);
return String.join(lastDelimiter,
String.join(delimiter, list.subList(0, last)),
list.get(last));
};
}
此版本还可以处理流为空或只有一个值的情况。感谢Holger和Andreas的建议,这些建议极大地改善了此解决方案。
我曾在评论中建议,可以使用", "
和", and"
作为定界符来完成牛津逗号,但是"a, and b"
对于两个元素而言,这会产生不正确的结果,因此,仅出于娱乐目的,这是正确执行牛津逗号的一个:
stream.collect(Collectors.collectingAndThen(Collectors.toList(),
joiningOxfordComma()));
public static Function<List<String>, String> joiningOxfordComma() {
return list -> {
int last = list.size() - 1;
if (last < 1) return String.join("", list);
if (last == 1) return String.join(" and ", list);
return String.join(", and ",
String.join(", ", list.subList(0, last)),
list.get(last));
};
}
问题内容: 我尝试将字符串拆分为令牌。 标记定界符不是单个字符,有些定界符包含在其他定界符中(例如&和&&),我需要将定界符作为标记返回。 StringTokenizer无法处理多个字符定界符。我认为String.split可以实现,但是无法猜测出适合我需要的神奇正则表达式。 任何想法 ? 例: -–编辑— 感谢所有人的帮助,Dasblinkenlight为我提供了解决方案。这是我在他的帮助下编写
问题内容: 我有包含例如的数据帧: 我需要删除(包括)两个::的所有内容,以便最终得到: 我尝试了str.trim(似乎不存在)和str.split,但没有成功。最简单的方法是什么? 问题答案: 您可以像平常一样使用。只需对string进行拆分,并索引从该方法创建的列表: 这是一个非熊猫解决方案: 编辑:这是上面发生的情况的分步说明: 我建议您查看pandas.Series.str文档,或者更好的
问题内容: 我在玩python,我意识到我们不需要使用’+’运算符来连接字符串,除非它与值一起使用。 例如: 现在我有两个问题: 为什么语句3无效,而语句1无效? 陈述1和2之间是否存在技术上的差异,例如计算速度等? 问题答案: 从文档: 允许使用可能使用不同的引用约定的多个相邻字符串文字(由空格分隔),其含义与它们的串联相同。因此,“ hello”“世界”等同于“ helloworld”。 语句
问题内容: 我需要正则表达式的帮助来解决以下问题: 我有一个字符串,例如“ 1£23 $ 456 $£$” 当我拆分它时,我希望字符串数组中的输出包含: 有人对如何最好地解决这个问题有任何想法吗?该解决方案需要满足以下附加要求: 也各执分隔符:,,,和 非定界符字符只是在定界符前带有可选空格的数字。 任何此类空格都是值的一部分,而不是分隔符本身。 问题答案: 使用更强大的功能代替。下面的代码应该可
问题内容: 用Java编写一个函数,该函数接受一个字符串数组,并且从字符串数组中仅返回那些具有重复的特定字母的字符串,例如:如果I / P为 那么O / P应该是 我可以使用解决 IS 没有使用正则表达式的方式 ,使之短? 问题答案: 您可以使用反向引用: 通过Debuggex进行可视化 Java示例: 印刷品:
问题内容: 在JavaScript中,我有一个包含许多迭代的循环,并且在每个迭代中,我正在创建一个包含许多运算符的巨大字符串。有没有更有效的方式来创建字符串?我正在考虑创建一个动态数组,在该数组中不断向其中添加字符串,然后进行联接。谁能解释并举例说明最快的方法吗? 问题答案: 基于JSPerf的基准测试,似乎是使用最快的方法,尽管不一定在每个浏览器中都使用。 为了在DOM中构建字符串,最好先将字符