You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何使用Kotlin内置函数实现句子大小写转换?replaceFirstChar使用无效求助

如何使用Kotlin内置函数实现句子大小写转换?replaceFirstChar使用无效求助

嘿,我来帮你搞定这个句子大小写转换的问题!首先得说,你注意到capitalize()函数已经废弃是对的,Kotlin官方确实推荐用replaceFirstChar()来替代它,但可能是用法没到位,所以才没达到预期效果。

咱们先明确需求:句子大小写转换是指字符串的第一个字符大写,其余所有字符小写,比如把"Smooth Meter Readings"转换成"Smooth meter readings"对吧?

之前你用replaceFirstChar没生效,大概率是只处理了第一个字符,却没把后面的大写字母转成小写。正确的做法应该是先把整个字符串转成小写,再把第一个字符转回大写,这样就能实现想要的效果了。

给你写个完整的实现函数:

fun toSentenceCase(input: String): String {
    // 先把整个字符串转为小写,再将第一个字符转为大写
    return input.lowercase().replaceFirstChar { it.uppercase() }
}

如果需要考虑不同地区的语言规则(比如土耳其语的大小写转换特殊),可以加上Locale参数适配:

import java.util.Locale

fun toSentenceCase(input: String, locale: Locale = Locale.getDefault()): String {
    return input.lowercase(locale).replaceFirstChar { it.uppercase(locale) }
}

咱们来测试一下这个函数:

fun main() {
    val sample = "Smooth Meter Readings"
    val result = toSentenceCase(sample)
    println(result) // 输出结果: Smooth meter readings
}

为什么之前的用法没效果?举个例子,如果直接调用"Smooth Meter Readings".replaceFirstChar { it.uppercase() },结果还是原来的字符串——因为第一个字符本来就是大写,而后面的"M"、"R"这些大写字母并没有被处理,所以必须先通过lowercase()把所有字符转成小写,再用replaceFirstChar把首字母转回去大写,这样就完美实现句子大小写了。

备注:内容来源于stack exchange,提问作者Yakubu

火山引擎 最新活动