java - Java:如何将字符串中每个单词的第一个字符大写,并正确大写名称
问题描述
我正在寻找执行以下操作的 Java 方法:
每个单词的字母都大写:
"a great string" -> "A Great String"
名称的撇号后的字母大写:
"rick o'shea" -> "Rick O'Shea"
为所有格添加的“s”不受影响:
"a bug's life" -> "A Bug's Life"
我试过这样的方法,WordUtils.capitalize
但大多数都不能满足 2,其他的都不能满足 3。
有没有一种可以同时满足这三个方面的有效方法?
编辑:更多情况下撇号后的字母不应大写
- 的
- '二
- 不
- 会
- 已经
- '回覆
但是对于这个问题,我们可以专注于's
.
解决方案
当您在库中找不到它时,您可以编写自己的方法。这是使用正则表达式的解决方案:
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());
}
推荐阅读
- openedge - PDSOE 的第一步:如何在 ABL UI Designer 透视图中获得正确的窗口视图
- ssl - Apache Directory Studio 中的 ERR 04120 TLS 握手错误
- c++ - 为什么即使 Eratothenes 筛子的时间复杂度为 O(nlog(log(n))),程序对于 n=100000 也不起作用
- ios - Alamofire,在其他排队的人之前推送一个新请求
- reactjs - React,从api获取后无法设置新数据
- python - Python打开替换以传递用于在SQL中创建表的变量导致错误“DDL之后只有ET或Null语句合法”
- macos - 无法在 OSX Big Sur 中编辑 AlertTones 文件夹
- python - aiohttp.client_exceptions.ContentTypeError 使用 apraw 在 discord.py 中无法控制地发生
- arrays - 检查数组中的任何元素是否符合我的条件
- excel - 根据多个其他单元格颜色更新单元格颜色