本篇用來說說在處理字符串的時候的一些Groovy風格的代碼,這裡所說的Groovy風格的代碼,主要是區別於Java語言的編碼風格。
首先,我們還是要定義一個String對象,來用作我們的例子:
def str = "hello"
現在,我們要說的是取子串的風格。
在Java語言中,我們要取下標為1和2處的子串,就必須使用如下所示的"substring"方法:
println str.substring(1,3)
而我們在Groovy語言中,就只需如下編碼:
println str[1..2]
運行的結果為:
el
接著,我們想獲取從下標1開始,到倒數第二位的子串,在Java語言中,我們必須如下編碼:
println str.substring(1,str.length()-1)
但是,Groovy語言風格的代碼卻是如下形式的:
println str[1..-2]
運行結果為:
ell
以上的編碼風格將是在Groovy語言中我們處理字符串的基礎。下面的編碼風格的代碼都是從這裡開始的。
現在,我們來模擬在Java語言中,我們使用反射技術的時候,經常需要通過從知道的JavaBean的一個屬性名獲取該屬性的"set"和"get"方法:
def propName = "email"
def firstSetFunctionName = "set"+propName.substring(0,1).toUpperCase()
def nextSetFunctionName = propName.substring(1,propName.length())
def setFunctionName = firstSetFunctionName+nextSetFunctionName
def firstGetFunctionName = "get"+propName.substring(0,1).toUpperCase()
def nextGetFunctionName = propName.substring(1,propName.length())
def getFunctionName = firstGetFunctionName+nextGetFunctionName
println setFunctionName
println getFunctionName
而我們的Groovy風格的代碼卻是形如下面的樣子:
def setFunctionName = 'set'+propName[0].toUpperCase()+propName[1..-1]
def getFunctionName = 'get'+propName[0].toUpperCase()+propName[1..-1]
println setFunctionName
println getFunctionName
運行的結果為:
setEmail
getEmail
現在,我們有如下的一個句子:
def str1 = 'hello world it is a groovy world'
我們希望把這個句子的所有單詞的首字母變為大寫,在Java語言中個編碼風格應該是下面的這個樣子:
def list = str1.split(' ')
def result = ''
list.each{
if(it.size()>1)
{
def firstStr = it.substring(0,1).toUpperCase()
def nextStr = it.substring(1,it.size())
result = result+firstStr+nextStr
}
else
{
result = result+it.toUpperCase()
}
result = result+' '
}
println result
而我們的Groovy語言風格的代碼卻是如下的樣子:
def str2 = str1.split(' ').collect{
it[0].toUpperCase()+(it.size()>1?it[1..-1]:'')
}.join(' ')
println str2
運行的結果為:
Hello World It Is A Groovy World