连接具有不同最后定界符的字符串

主理想域

使用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));
            };
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

javascript:将字符串拆分为具有不同定界符的数组

来自分类Dev

Bash-比较具有不同定界符的字符串的简便方法?

来自分类Dev

连接字符串而不重复定界符

来自分类Dev

按定界符分割并连接字符串问题

来自分类Dev

具有多个定界符的字符串流

来自分类Dev

匹配具有可变左右定界符的字符串

来自分类Dev

将具有嵌套定界符的字符串转换为映射

来自分类Dev

如何删除具有定界符的字符串中的重复值

来自分类Dev

具有4个定界符的TSQL解析字符串

来自分类Dev

拆分没有通用定界符的字符串

来自分类Dev

似乎没有定界符的字符串解析

来自分类Dev

解析带有多个定界符的字符串

来自分类Dev

字符串操作:如何使用定界符分割和连接字符串包括

来自分类Dev

两个相同或不同定界符之间的子字符串(当定界符出现多次时)

来自分类Dev

字符串在R中的最后一个(也是第n个)定界符处拆分,并删除定界符之前的字符串

来自分类Dev

字符串在R中的最后一个(也是第n个)定界符处分割,并删除定界符之前的字符串

来自分类Dev

将两列的表连接到带有2个定界符的单个字符串中

来自分类Dev

最后(或第四次)出现“。”时分割字符串。定界符

来自分类Dev

SQL查询以选择最后一个定界符之后的字符串

来自分类Dev

在最后一个定界符处剪切字符串

来自分类Dev

在最后(或第四次)出现“。”时分割字符串。定界符

来自分类Dev

转义字符串中的最后一个定界符

来自分类Dev

bash:整数到字符串,分割并与定界符连接

来自分类Dev

试图用定界符连接C字符串数组

来自分类Dev

在PHP中,如何分割起始和结束定界符不同的字符串

来自分类Dev

根据“ |”分割字符串 定界符并将值设置为不同的数组

来自分类Dev

分割字符串并在不同的定界符之前获取值

来自分类Dev

命令行:获取2个不同定界符之间的子字符串

来自分类Dev

使用多字符定界符分割字符串

Related 相关文章

  1. 1

    javascript:将字符串拆分为具有不同定界符的数组

  2. 2

    Bash-比较具有不同定界符的字符串的简便方法?

  3. 3

    连接字符串而不重复定界符

  4. 4

    按定界符分割并连接字符串问题

  5. 5

    具有多个定界符的字符串流

  6. 6

    匹配具有可变左右定界符的字符串

  7. 7

    将具有嵌套定界符的字符串转换为映射

  8. 8

    如何删除具有定界符的字符串中的重复值

  9. 9

    具有4个定界符的TSQL解析字符串

  10. 10

    拆分没有通用定界符的字符串

  11. 11

    似乎没有定界符的字符串解析

  12. 12

    解析带有多个定界符的字符串

  13. 13

    字符串操作:如何使用定界符分割和连接字符串包括

  14. 14

    两个相同或不同定界符之间的子字符串(当定界符出现多次时)

  15. 15

    字符串在R中的最后一个(也是第n个)定界符处拆分,并删除定界符之前的字符串

  16. 16

    字符串在R中的最后一个(也是第n个)定界符处分割,并删除定界符之前的字符串

  17. 17

    将两列的表连接到带有2个定界符的单个字符串中

  18. 18

    最后(或第四次)出现“。”时分割字符串。定界符

  19. 19

    SQL查询以选择最后一个定界符之后的字符串

  20. 20

    在最后一个定界符处剪切字符串

  21. 21

    在最后(或第四次)出现“。”时分割字符串。定界符

  22. 22

    转义字符串中的最后一个定界符

  23. 23

    bash:整数到字符串,分割并与定界符连接

  24. 24

    试图用定界符连接C字符串数组

  25. 25

    在PHP中,如何分割起始和结束定界符不同的字符串

  26. 26

    根据“ |”分割字符串 定界符并将值设置为不同的数组

  27. 27

    分割字符串并在不同的定界符之前获取值

  28. 28

    命令行:获取2个不同定界符之间的子字符串

  29. 29

    使用多字符定界符分割字符串

热门标签

归档