Kotlin替换capitalize时调用titlecase前为何要先判断字符是否小写
问题解答
这个isLowerCase判断的核心作用是1:1兼容已废弃的String.capitalize()方法的原有行为,同时规避适配问题、减少不必要的性能开销,具体原因如下:
- 对齐旧API的原生逻辑:Kotlin旧版本
capitalize()方法的默认实现就是仅对首字符为小写的场景做首字母大写转换,非小写场景(首字符本身为大写、数字、标点、emoji等无大小写区分的字符)会直接返回原字符串。如果去掉判断直接使用简化写法,升级Kotlin版本后原有业务逻辑可能出现非预期的行为变更。 - 规避多Locale适配问题:不同地区的Locale对字符大小写、首字母大写的转换规则存在差异,部分小语种的特殊字符在本身已是大写的前提下调用
titlecase(),可能返回不符合预期的转换结果,加判断可以完全规避这类适配风险。 - 降低不必要的性能消耗:
titlecase()方法需要依赖当前Locale做规则匹配计算,存在固定性能开销。如果首字符本身不是小写,直接返回原字符的toString()结果可以跳过这部分计算,在批量处理大量字符串的场景下收益更为明显。
举个简单的测试示例:
输入字符串为
"Kotlin"(首字符本身为大写)
- 官方推荐写法输出:
"Kotlin",和旧capitalize()执行结果完全一致- 简化写法会多执行一次无意义的
titlecase计算,在特殊Locale下甚至可能返回非预期的转换结果
内容的提问来源于stack exchange,提问作者Moshe Katz
相关产品推荐
相关产品推荐

