如何在Kotlin中将非字母开头字符串的首个字母转为大写?
解决Kotlin中跳过开头非字母数字字符,将首个字母数字转为大写的问题
你目前用的replaceFirstChar()只会处理字符串的第一个字符,没法跳过开头的标点、引号这类非字母数字内容。要实现忽略前置非字母数字,仅把第一个出现的字母数字转为大写,可以通过正则匹配结合替换实现,或者封装成扩展函数方便复用。
方法1:直接用正则replaceFirst
用正则表达式匹配字符串里第一个字母数字字符(\\p{Alnum}匹配Unicode标准下的所有字母和数字,比[a-zA-Z0-9]兼容性更强),再把它替换成大写形式:
fun main(){ println("kotlin".replaceFirst("\\p{Alnum}".toRegex()) { it.value.uppercase() }) // Kotlin println("¡kotlin!".replaceFirst("\\p{Alnum}".toRegex()) { it.value.uppercase() }) // ¡Kotlin! println("¿kotlin?".replaceFirst("\\p{Alnum}".toRegex()) { it.value.uppercase() }) // ¿Kotlin? println("\"¿kotlin?\"".replaceFirst("\\p{Alnum}".toRegex()) { it.value.uppercase() }) // "¿Kotlin?" println("\"kotlin\"".replaceFirst("\\p{Alnum}".toRegex()) { it.value.uppercase() }) // "Kotlin" }
输出结果:
Kotlin ¡Kotlin! ¿Kotlin? "¿Kotlin?" "Kotlin"
方法2:封装为String扩展函数(推荐)
如果需要多次用这个逻辑,可以封装成String的扩展函数,让代码更简洁易读:
fun String.capitalizeFirstAlnum(): String { return this.replaceFirst("\\p{Alnum}".toRegex()) { it.value.uppercase() } } fun main(){ println("kotlin".capitalizeFirstAlnum()) // Kotlin println("¡kotlin!".capitalizeFirstAlnum()) // ¡Kotlin! println("¿kotlin?".capitalizeFirstAlnum()) // ¿Kotlin? println("\"¿kotlin?\"".capitalizeFirstAlnum()) // "¿Kotlin?" println("\"kotlin\"".capitalizeFirstAlnum()) // "Kotlin" }
关键说明
\\p{Alnum}是正则的Unicode字符类,能匹配任意字母(包括中文、日文等非英文字母)或数字,确保多语言场景下的兼容性。replaceFirst只会替换第一个匹配到的字符,刚好符合“找到第一个字母数字并转大写”的需求。
内容的提问来源于stack exchange,提问作者A. Cedano
相关产品推荐
相关产品推荐

