Jenkins實(shí)踐指南-03-Groovy基礎(chǔ)知識(shí)02

2.4.4 數(shù)據(jù)類型

2.4.4.1 字符串類型

2.4.4.1.1 字符串定義

? ? 在Groovy中字符中是使用單引號(hào)('')录淡、雙引號(hào)("")和三引號(hào)(''' '''""" """)包裹起來(lái)的字符串捌木。示例如下所示:

def strA='I am Surpass'
def strB="I am Surpass"
def strC=""" I
             am
             Surpass
"""
def strD='''I
             am
             Surpass
'''

println "strA is ${strA}"
println "strB is ${strB}"
println "strC is ${strC}"
println "strD is ${strD}"

? ? 輸出結(jié)果如下所示:

strA is I am Surpass
strB is I am Surpass
strC is  I
             am
             Surpass

strD is I
             am
             Surpass
2.4.4.1.2 轉(zhuǎn)義字符串

? ? 在Groovy主要的轉(zhuǎn)義字符串如下所示:

轉(zhuǎn)義字符串 含義
\b 退格
\n 換行
\r 回車并換行
\t 制表符
\\ \
\' 單引號(hào)
\" 雙引號(hào)

? ? 示例如下所示:

def strA='I\nam\nSurpass'
def strB="I\tam\tSurpass"
println "strA is ${strA}"
println "strB is ${strB}"

? ? 輸出結(jié)果如下所示:

strA is I
am
Surpass
strB is I   am  Surpass
2.4.4.1.3 Unicode字符

? ? 當(dāng)部分字符在你所使用的鍵盤不存在,可以使用Unicode字符嫉戚,示例如下所示:

println 'The Euro currency symbol: \u20AC'

? ? 輸出結(jié)果如下所示:

The Euro currency symbol: €
2.4.4.1.4 字符串插值

? ? 在Groovy里面刨裆,除了單引號(hào)('')三個(gè)單引號(hào)(''' ''')之外,所有的字面常量均可以實(shí)現(xiàn)插值彬檀。字符串插值主要作用如下所示:

  • 將占位符給替換為實(shí)際的變量值崔拥,占位符通常被${}包裹。
  • 在插值表達(dá)式里面實(shí)現(xiàn)表達(dá)式功能

? ? 示例如下所示:

def name="Surpass"
def greeting="Hello,${name}"
def sum="The sum of 8 and 7 equals ${8+7}"
def templateString="""
     Dear ${name},

     You are the winner
"""
println greeting
println sum
println templateString

? ? 運(yùn)行結(jié)果如下所示:

Hello,Surpass
The sum of 8 and 7 equals 15

     Dear Surpass,

     You are the winner


除以上常見(jiàn)的用法凤覆,${}還支持在占位符里進(jìn)行聲明链瓦,如果占位符里面有多個(gè)聲明,則最終取值為最后一行代碼的值,示例如下所示:

def sum="The sum of 8 and 7 equals ${def a=10;def b=20; a+b}"
println sum

? ? 運(yùn)行結(jié)果如下所示:

The sum of 8 and 7 equals 30

? ? 在Groovy里面插值的用法總結(jié)如下所示:

字符類型 語(yǔ)法 是否支持插值 示例 輸出結(jié)果
單引號(hào) '..' def name="Surpass";println 'Hello,${name}' Hello,${name}
雙引號(hào) ".." def name="Surpass";println "Hello,${name}" Hello,Surpass
三單引號(hào) '''..''' def name="Surpass";println '''Hello,${name}''' Hello,${name}
三又引號(hào) """..""" def name="Surpass";println """Hello,${name}""" Hello,Surpass
2.4.4.1.5 常用方法
  • 1.判斷是否包含特定內(nèi)容

? ? 判斷是否包含特定內(nèi)容一般使用方法contains慈俯,示例如下所示:

def hello="Hello , Surpass"
def containStr="Surpass"
if (hello.contains(containStr)){
    println "${hello} contains ${containStr}"
}else{
  println "${hello} not contains ${containStr}"
}
  • 2.查看字符串長(zhǎng)度

? ? 查看字符串長(zhǎng)度一般使用方法lengthsize渤刃,示例如下所示:

def hello="Hello , Surpass"

println hello.size()
println  hello.length()
  • 3.轉(zhuǎn)換為字符串

? ? 轉(zhuǎn)換為字符串長(zhǎng)度一般使用方法toString,示例如下所示:

def number=123
println number instanceof String  // false
println number.toString() instanceof String // true
  • 4.判斷以特定內(nèi)容開(kāi)始或結(jié)束

? ? 轉(zhuǎn)換為字符串長(zhǎng)度一般使用方法startsWithendsWith贴膘,示例如下所示:

def hello="Hello,Surpass"
println hello.startsWith("Hello") // true
println hello.endsWith("Surpass") // true
  • 5.轉(zhuǎn)換大小寫

? ? 轉(zhuǎn)換為字符串長(zhǎng)度一般使用方法toUpperCasetoLowerCase卖子,示例如下所示:

def hello="Hello,Surpass"
println hello.toUpperCase() // HELLO,SURPASS
println hello.toLowerCase() // hello,surpass
  • 6.分隔字符串

? ? 轉(zhuǎn)換為字符串長(zhǎng)度一般使用方法split,示例如下所示:

def hello="Hello,Surpass"
def splitStr=hello.split(",") // 輸出為字符數(shù)組 [Hello, Surpass]

for(item in splitStr){
  println item
}

使用split方法需要注意刑峡,默認(rèn)是支持正則表達(dá)式洋闽,因?yàn)樘厥庾址枰?code>轉(zhuǎn)義

  • 7.字符連接

? ? 字符中常用方法為+concat,示例如下所示:

def strA="Hello"
def strB=","
def strC="Surpass"

println strA+strB+strC  // Hello,Surpass
println strA.concat(strB).concat(strC) // Hello,Surpass
  • 8.字符替換
    ? ? 字符中常用方法為replace突梦,示例如下所示:
def hello="Hello,Surpass"

println hello.replace("Hello","Hi") // Hi,Surpass

2.4.4.2 數(shù)值類型

2.4.4.2.1 int類型

? ? Groovy中常見(jiàn)的數(shù)值類型有byte诫舅、cahrshort宫患、int刊懈、longjava.math.BigInteger娃闲。定義示例如下所示:

byte b=1
char c=2
short s=3
int i=5
long l=5

以上為原始的定義方式虚汛,在Groovy,推薦使用def皇帮,系統(tǒng)會(huì)進(jìn)行類型推斷卷哩,示例如下所示:

def a=1
assert a instanceof Integer

//  Integer.MAX_VALUE
def b=2147483647
assert b instanceof Integer

// Integer.MAX_VALUE + 1
def c = 2147483648
assert c instanceof Long

// Long.MAX_VALUE
def d = 9223372036854775807
assert d instanceof Long

? ? 對(duì)于人類而言,平時(shí)接觸更多的是十進(jìn)制的數(shù)字属拾,Groovy也支持非十進(jìn)制的數(shù)字殉疼,例如二進(jìn)制八進(jìn)制捌年、十六進(jìn)制瓢娜,表示方法如下所示:

  • 二進(jìn)制:以0b開(kāi)始
  • 八進(jìn)制:以0開(kāi)始
  • 十六進(jìn)制:以0x開(kāi)始

? ? 示例如下所示:

def binaryNum=0b111
def octalNum=012
def hexNum=0xFF

println binaryNum
println octalNum
println hexNum

? ? 輸出結(jié)果如下所示:

7
10
255
2.4.4.2.2 浮點(diǎn)型

? ? 在Groovy中,常見(jiàn)的浮點(diǎn)類型主要有floatdouble礼预,示例如下所示:

float f=7.18
double d=3.1415926

? ? 除以上聲明浮點(diǎn)數(shù)據(jù)后眠砾,也可以使用科學(xué)計(jì)數(shù)法,使用Ee進(jìn)行表示托酸,示例如下所示:

def a=1e3
def b=1E-3
assert a==1000
assert b==0.001

2.4.4.3 bool類型

? ? 在Groovy中褒颈,bool類型只有兩個(gè)值truefalse,常用于邏輯判斷等場(chǎng)景励堡,示例如下所示:

def boolVariableA=true
boolean boolVariableB=false
assert boolVariableA
assert !boolVariableB

2.4.4.4 List類型

2.4.4.4.1 基本定義

? ? 在Groovy中使用中括號(hào)[]來(lái)定義List谷丸,各個(gè)元素間使用逗號(hào),來(lái)分隔元素,示例如下所示:

def numbers=[1,2,3]
def personInfo=["Surpass",28,"Shanghai"]
2.4.4.4.2 常用方法
  • 1.獲取List長(zhǎng)度

? ? 獲取List長(zhǎng)度可以使用其方法size()应结,示例如下所示:

def numbers=[1,2,3,4,5,6,7,8,9,0]
def personInfo=["Surpass",28,"Shanghai"]

numbersLength= numbers.size()
personInfoLength= personInfo.size()
  • 2.獲取List元素值

? ? 獲取List的元素值刨疼,使用對(duì)應(yīng)的索引即可泉唁,索引從0開(kāi)始,示例如下所示:

def personInfo=["Surpass",28,"Shanghai"]

personName=personInfo[0]
personLoc=personInfo[2]
  • 3.添加List元素值

? ? 向List添加元素揩慕,可以使用add方法或使用符號(hào)<<亭畜,示例如下所示:

def personInfo=["Surpass",28,"Shanghai"]

personInfo << "Wuhan"
personInfo.add("Testor")
  • 4.判斷是否為空

? ? 判斷List是否為空,可以使用isEmpty方法

def personInfo=["Surpass",28,"Shanghai"]
def emptyList=[]

if ( emptyList.isEmpty() ){
   println("personInfo is " + personInfo)
}else{
   println("emptyList is " + emptyList)
}
  • 5.判斷是否存在交集

? ? 判斷兩個(gè)List是否有交集迎卤,可以使用方法intersect

def personInfoA=["Surpass",28,"Shanghai"]
def personInfoB=["Surpass"]

println(personInfoA.intersect(personInfoB)) // 輸出結(jié)果:[Surpass]
  • 6.List去重

? ? List去重可以使用方法unique

def personInfo=["Surpass",28,"Shanghai","Surpass"]

println(personInfo.unique()) // 輸出結(jié)果:[Surpass, 28, Shanghai]
  • 7.判斷是否包含某元素

? ? 判斷List是否包含某元素可以使用方法contains

def personInfo=["Surpass",28,"Shanghai","Surpass"]

println(personInfo.contains("Surpass")) // 輸出結(jié)果:true
  • 8.刪除或清空元素

? ? List中刪除元素可以使用方法remove,清空List可以使用方法clear

def personInfo=["Surpass",28,"Shanghai"]
def removeItem=personInfo.remove(0)

println(removeItem) // Surpass
println(personInfo) // [28, Shanghai]
personInfo.clear()
println(personInfo) // []
  • 9.遍歷元素

? ? List中遍歷元素可以使用方法each

def personInfo=["Surpass",28,"Shanghai"]

// 方式一:
personInfo.each{ item ->
  println item
}

// 方式二:
personInfo.each{
   println it
}

// 方式三:
personInfo.eachWithIndex{ item,index ->
  println index + ":" + item
}

? ? 最終的輸出結(jié)果如下所示:

urpass
28
Shanghai

Surpass
28
Shanghai

0:Surpass
1:28
2:Shanghai

2.4.4.5 Map

2.4.4.5.1 基本定義

? ? 在Groovy里面定義Map使用[key:value]進(jìn)行定義拴鸵,多個(gè)key-value之間使用進(jìn)行分隔蜗搔,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]
2.4.4.5.2 常用方法
  • 1.獲取Map大小

? ? 獲取Map大小劲藐,一般使用方法size,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]

println personInfo.size() // 3
  • 2.獲取Map值

? ? 獲取Map值樟凄,一般使用方法get聘芜、map[key]map.key形式,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]
// 方式一
println personInfo["name"]
// 方式二
println personInfo.get("name")
// 方式三
println personInfo.name
  • 3.判斷Map是否為空

? ? 判斷Map是否為空不同,一般使用方法isEmpty,示例如下所示:

def emptyMap=[:]
println emptyMap.isEmpty() // true
  • 4.判斷Map是否包含某個(gè)key或value

? ? 判斷Map是否包含某個(gè)key或value溶耘,一般使用方法containsKeycontainsValue二拐,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]

println personInfo.containsKey("name") // true
println personInfo.containsValue("Surpass") // true
  • 5.獲取Map所有key、value或所有元素

? ? 獲取Map所有key凳兵、value或所有元素百新,一般使用方法keySetvaluesentrySet庐扫,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]

// 獲取所有Key
println personInfo.keySet() // [name, age, loc]
// 獲取所有Value
println personInfo.values() //  [Surpass, 28, Shanghai]
// 獲取所有Map 元素的key和value
println personInfo.entrySet() // [name=Surpass, age=28, loc=Shanghai]
  • 6.向Map添加元素

? ? 向Map添加元素饭望,一般使用方法put(key,value)map[key]=valuemapA.putAll(mapB)形庭,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]
def from=[from:"Wuhan",to:"Beijing"]

//方式一:
personInfo.put("dst","Shengzhen")
println personInfo // [name:Surpass, age:28, loc:Shanghai, dst:Shengzhen]
// 方式二:
personInfo["src"]="Hanzhou"  // [name:Surpass, age:28, loc:Shanghai, dst:Shengzhen, src:Hanzhou]
println personInfo
// 方式三:
personInfo.putAll(from)
println personInfo // [name:Surpass, age:28, loc:Shanghai, dst:Shengzhen, src:Hanzhou, from:Wuhan, to:Beijing]
  • 7.刪除Map元素

? ? 刪除Map元素铅辞,一般使用方法remove(key)clear,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]

personInfo.remove("name")
println personInfo // [age:28, loc:Shanghai]

personInfo.clear()
println personInfo // [:]
  • 8.Map迭代

? ? Map迭代萨醒,一般使用方法each斟珊,示例如下所示:

def personInfo=[name:"Surpass",age:28,loc:"Shanghai"]

// 方式一
personInfo.each{ item ->
  println item.key + ":" + item.value
}

// 方式二
personInfo.each{ k,v ->
   println k + ":" + v
}

// 方式三
personInfo.eachWithIndex{ item,index ->
  println index + ":" + item.key + ":" + item.value
}

// 方式四

personInfo.eachWithIndex{ k,v,index ->
 println index + ":" + k + ":" + v
}

? ? 最終的輸出結(jié)果如下所示:

name:Surpass
age:28
loc:Shanghai

name:Surpass
age:28
loc:Shanghai

0:name:Surpass
1:age:28
2:loc:Shanghai

0:name:Surpass
1:age:28
2:loc:Shanghai
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市富纸,隨后出現(xiàn)的幾起案子囤踩,更是在濱河造成了極大的恐慌,老刑警劉巖晓褪,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堵漱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涣仿,警方通過(guò)查閱死者的電腦和手機(jī)勤庐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人埃元,你說(shuō)我怎么就攤上這事涝涤。” “怎么了岛杀?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵阔拳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我类嗤,道長(zhǎng)糊肠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任遗锣,我火速辦了婚禮货裹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘精偿。我一直安慰自己弧圆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布笔咽。 她就那樣靜靜地躺著搔预,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叶组。 梳的紋絲不亂的頭發(fā)上拯田,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音甩十,去河邊找鬼船庇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侣监,可吹牛的內(nèi)容都是我干的鸭轮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼橄霉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼张弛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起酪劫,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吞鸭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后覆糟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體刻剥,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年滩字,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了造虏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片御吞。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漓藕,靈堂內(nèi)的尸體忽然破棺而出陶珠,到底是詐尸還是另有隱情,我是刑警寧澤享钞,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布揍诽,位于F島的核電站,受9級(jí)特大地震影響栗竖,放射性物質(zhì)發(fā)生泄漏暑脆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一狐肢、第九天 我趴在偏房一處隱蔽的房頂上張望添吗。 院中可真熱鬧,春花似錦份名、人聲如沸碟联。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲤孵。三九已至,卻和暖如春想邦,著一層夾襖步出監(jiān)牢的瞬間裤纹,已是汗流浹背委刘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工丧没, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锡移。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓呕童,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淆珊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夺饲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容