在Groovy中查找小写单词

时间:2014-08-08 09:15:28

标签: regex groovy

我最近开始学习Groovy。 我有一个小任务:从字符串中获取所有小写单词作为List

我写了下一段代码:

public List<String> findWordsInLowercase(String string){
    return string.findAll(/\b[a-z]+\b/)
}

有效。但我想在没有正则表达式的情况下这样做,因为它很难阅读,理解和记忆。

现在我尝试在没有正则表达式的情况下编写相同的函数。我的代码:

public List<String> findWordsInLowercase(String string){
        def words = string.split()
        words.findAll
                {it ->  for(Character character in it)
                        character.isLowerCase()}
    }

但它不起作用:(

2 个答案:

答案 0 :(得分:5)

不是检查每个字符,为什么不检查这个字是否与它的小写字母相同?

public List<String> findWordsInLowercase(String string) {
    def words = string.split()
    words.findAll { word ->
        word.toLowerCase() == word
    }
}

或者,制作第一个功能可能更容易理解:

public List<String> findWordsInLowercase(String string) {
    string.findAll( /\b\p{javaLowerCase}+\b/ )
}

哪个应该提高可读性,而你不需要记住它,因为你现在有一个功能; - )

答案 1 :(得分:0)

您还可以使用元编程来扩展 String类,然后在常规方法中使用此扩展

String.metaClass.isLowerCase = { 
    delegate ? delegate.every { it.toCharacter().isLowerCase() } : false
}

public List<String> findWordsInLowercase(String string){
    string.split().findAll { it.isLowerCase() }
}

assert findWordsInLowercase('AAA bbb') == ['bbb']