Estou usando replaceFirstChar()
and uppercase()
para converter o primeiro caractere de uma string para maiúscula.
Mas algumas strings podem ter sinais de pontuação, aspas, etc. como o primeiro caractere. Nesses casos, quero que ele os ignore e substitua o primeiro caractere alfanumérico que encontrar.
Como eu poderia conseguir isso?
Código
fun main(){
println("kotlin".replaceFirstChar { it.uppercase() }) // Kotlin
println("¡kotlin!".replaceFirstChar { it.uppercase() }) // I need ¡Kotlin!
println("¿kotlin?".replaceFirstChar { it.uppercase() }) // I need ¿Kotlin?
println("\"¿kotlin?\"".replaceFirstChar { it.uppercase() }) // I need "¿Kotlin?"
println("\"kotlin\"".replaceFirstChar { it.uppercase() }) // I need "Kotlin"
}
Saída
Kotlin
¡kotlin!
¿kotlin?
"¿kotlin?"
"kotlin"
Saída desejada
Kotlin
¡Kotlin!
¿Kotlin?
"¿Kotlin?"
"Kotlin"
Você pode usar os seguintes métodos (e lógica) no seu caso:
Use o indexOfFirst na sua entrada de string com o método isLetter
Coloque somente em maiúscula o caractere retornado por indexOfFirst
Pode parecer algo assim:
Obviamente, se as strings em si não tiverem nenhuma letra, você vai querer adicionar uma proteção if depois de usar indexOfFirst para ver se é igual a -1.
Você pode aproveitar uma expressão regular que tenha como alvo exatamente o alfabeto que você está procurando, assim: