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)度一般使用方法length
或size
渤刃,示例如下所示:
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)度一般使用方法startsWith
和endsWith
贴膘,示例如下所示:
def hello="Hello,Surpass"
println hello.startsWith("Hello") // true
println hello.endsWith("Surpass") // true
- 5.轉(zhuǎn)換大小寫
? ? 轉(zhuǎn)換為字符串長(zhǎng)度一般使用方法toUpperCase
和toLowerCase
卖子,示例如下所示:
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
诫舅、cahr
、short
宫患、int
刊懈、long
、java.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)類型主要有float
和double
礼预,示例如下所示:
float f=7.18
double d=3.1415926
? ? 除以上聲明浮點(diǎn)數(shù)據(jù)后眠砾,也可以使用科學(xué)計(jì)數(shù)法
,使用E
或e
進(jìn)行表示托酸,示例如下所示:
def a=1e3
def b=1E-3
assert a==1000
assert b==0.001
2.4.4.3 bool類型
? ? 在Groovy中褒颈,bool類型只有兩個(gè)值true
和false
,常用于邏輯判斷等場(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溶耘,一般使用方法containsKey
和containsValue
二拐,示例如下所示:
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或所有元素百新,一般使用方法keySet
、values
和entrySet
庐扫,示例如下所示:
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]=value
或mapA.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