使用逗号和“and”在 Java 中加入 List<String>

新手上路,请多包涵

给定一个列表

List<String> l = new ArrayList<String>();
l.add("one");
l.add("two");
l.add("three");

我有一个方法

String join(List<String> messages) {
        if (messages.isEmpty()) return "";
        if (messages.size() == 1) return messages.get(0);
        String message = "";
        message = StringUtils.join(messages.subList(0, messages.size() -2), ", ");
        message = message + (messages.size() > 2 ? ", " : "") + StringUtils.join(messages.subList(messages.size() -2, messages.size()), ", and ");
        return message;
    }

其中,对于 l,产生“一、二和三”。我的问题是,是否有一个标准的(apache-commons)方法可以做同样的事情?例如

WhatEverUtils.join(l, ", ", ", and ");

澄清。我的问题是没有让这个方法起作用。它按我想要的方式工作,它已经过测试并且一切正常。我的问题是我找不到实现此类功能的类似 apache-commons 的模块。这让我感到惊讶,因为我不是第一个需要它的人。

但也许其他人都刚刚完成

StringUtils.join(l, ", ").replaceAll(lastCommaRegex, ", and");

原文由 slipset 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 538
2 个回答

如果您想要更全面的解决方案,可以使用出色的 NLG 库 - SimpleNLG

 //initialize
NLGFactory nlgFactory = new NLGFactory(Lexicon.getDefaultLexicon());
Realiser realiser = new Realiser(lexicon);
CoordinatedPhraseElement cp = nlgFactory.createCoordinatedPhrase();
cp.setConjunction("and");

//code begins here
List<String> l = new ArrayList<String>();
l.add("one");
l.add("two");
l.add("three");
l.forEach(cp::addCoordinate);

//output
String output = realiser.realise(cp).toString();

这可以支持任意数量的数组元素,而无需执行像“删除最后一个逗号”这样的丑陋技巧。

原文由 SatheeshJM 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 Java 8 中,您可以使用 String.join() 如下所示:

 Collection<String> elements = ....;
String result = String.join(", ", elements);

原文由 Ali Dehghani 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题