java – 如何连接列表项,但为最后一项使用不同的分隔符?
发布时间:2020-12-15 00:46:56 所属栏目:Java 来源:网络整理
导读:给出如下列表: 列表与LT;字符串 names = Lists.newArrayList(“乔治”,“约翰”,“保罗”,“林戈”) 我想将它转换为这样的字符串: 乔治,约翰,保罗和林戈 我可以用相当笨拙的StringBuilder这样做: String nameList = names.stream().collect(joining(","))
给出如下列表:
列表与LT;字符串> names = Lists.newArrayList(“乔治”,“约翰”,“保罗”,“林戈”) 我想将它转换为这样的字符串: 乔治,约翰,保罗和林戈 我可以用相当笨拙的StringBuilder这样做: String nameList = names.stream().collect(joining(",")); if (nameList.contains(",")) { StringBuilder builder = new StringBuilder(nameList); builder.replace(nameList.lastIndexOf(','),nameList.lastIndexOf(',') + 1," and"); return builder.toString(); } 是否有更优雅的方法?如果需要,我不介意使用库. 笔记: >我可以使用带索引的旧for循环,但我不是在寻找这样的解决方案 解决方法
正如您已经完成的大部分内容,我将介绍第二种方法“replaceLast”,它目前为止不在JDK for java.lang.String中:
import java.util.List; import java.util.stream.Collectors; public final class StringUtils { private static final String AND = " and "; private static final String COMMA = ","; // your initial call wrapped with a replaceLast call public static String asLiteralNumeration(List<String> strings) { return replaceLast(strings.stream().collect(Collectors.joining(COMMA)),COMMA,AND); } public static String replaceLast(String text,String regex,String replacement) { return text.replaceFirst("(?s)" + regex + "(?!.*?" + regex + ")",replacement); } } 您也可以更改分隔符和参数.到目前为止测试您的要求: @org.junit.Test public void test() { List<String> names = Arrays.asList("George","John","Paul","Ringo"); assertEquals("George,John,Paul and Ringo",StringUtils.asLiteralNumeration(names)); List<String> oneItemList = Arrays.asList("Paul"); assertEquals("Paul",StringUtils.asLiteralNumeration(oneItemList)); List<String> emptyList = Arrays.asList(""); assertEquals("",StringUtils.asLiteralNumeration(emptyList)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |