首页 > 解决方案 > Java:如何将字符串中每个单词的第一个字符大写,并正确大写名称

问题描述

我正在寻找执行以下操作的 Java 方法:

  1. 每个单词的字母都大写:"a great string" -> "A Great String"

  2. 名称的撇号后的字母大写:"rick o'shea" -> "Rick O'Shea"

  3. 为所有格添加的“s”不受影响:"a bug's life" -> "A Bug's Life"

我试过这样的方法,WordUtils.capitalize但大多数都不能满足 2,其他的都不能满足 3。

有没有一种可以同时满足这三个方面的有效方法?

编辑:更多情况下撇号后的字母不应大写

但是对于这个问题,我们可以专注于's.

标签: javastringcapitalizationcapitalize

解决方案


当您在库中找不到它时,您可以编写自己的方法。这是使用正则表达式的解决方案:

String capitalize(String s) {
    Matcher m = Pattern.compile("(\\w)(\\w*)").matcher(s);
    s = m.replaceAll(mr -> mr.group(1).toUpperCase() + mr.group(2).toLowerCase());
    m = Pattern.compile("'\\w\\b").matcher(s);
    return m.replaceAll(mr -> mr.group(0).toLowerCase());
}

推荐阅读