Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

First word from PascalCase as lowercase

I have a string that contains text in PascalCase and I need to extract first word from it and convert it to lowercase:

assert firstWord('PmdExtension') == 'pmd'
assert firstWord('PMDExtension') == 'p'
assert firstWord('Pmd') == 'pmd'
assert firstWord('CodeQualityExtension') == 'code'

static String firstWord(String word) {
    return '???'
}

Let's focus only on valid PascalCase identifiers (without any other characters, numbers and always starting with capital letter).

What would be the simple and clean solution for my problem?

I've tried

word.split(/[A-Z]/).first().join(' ')

but it removes all uppercase letters, while I need to preserve them.

like image 410
Michal Kordas Avatar asked Oct 19 '25 03:10

Michal Kordas


1 Answers

assert firstWord('PmdExtension') == 'pmd'
assert firstWord('PMDExtension') == 'p'
assert firstWord('Pmd') == 'pmd'
assert firstWord('CodeQualityExtension') == 'code'
assert firstWord('') == ''
assert firstWord(null) == ''

static String firstWord(String word) {
    word ? word.split(/(?=\p{Lu})/)[0].toLowerCase() : ''

    // A verbose way would be as below (omitting the null check for brevity)
    // word[0].toLowerCase() + word[1..-1].takeWhile { Character.isLowerCase(it) }
}
like image 110
dmahapatro Avatar answered Oct 22 '25 04:10

dmahapatro