2.4.4 数据类型
2.4.4.1 字符串类型
2.4.4.1.1 字符串定义
在Groovy中字符中是使用单引号(''
)、双引号(""
)和三引号(''' '''
和""" """
)包裹起来的字符串。示例如下所示:
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}"
输出结果如下所示:
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 转义字符串
在Groovy主要的转义字符串如下所示:
转义字符串 | 含义 |
---|---|
\b | 退格 |
\n | 换行 |
\r | 回车并换行 |
\t | 制表符 |
\\ | \ |
\' | 单引号 |
\" | 双引号 |
示例如下所示:
def strA='I\nam\nSurpass'
def strB="I\tam\tSurpass"
println "strA is ${strA}"
println "strB is ${strB}"
输出结果如下所示:
strA is I
am
Surpass
strB is I am Surpass
2.4.4.1.3 Unicode字符
当部分字符在你所使用的键盘不存在,可以使用Unicode字符,示例如下所示:
println 'The Euro currency symbol: \u20AC'
输出结果如下所示:
The Euro currency symbol: €
2.4.4.1.4 字符串插值
在Groovy里面,除了单引号('')
和三个单引号(''' ''')
之外,所有的字面常量均可以实现插值。字符串插值主要作用如下所示:
- 将占位符给替换为实际的变量值,占位符通常被
${}
包裹。 - 在插值表达式里面实现表达式功能
示例如下所示:
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
运行结果如下所示:
Hello,Surpass
The sum of 8 and 7 equals 15
Dear Surpass,
You are the winner
除以上常见的用法,
${}
还支持在占位符里进行声明,如果占位符里面有多个声明,则最终取值为最后一行代码的值,示例如下所示:
def sum="The sum of 8 and 7 equals ${def a=10;def b=20; a+b}"
println sum
运行结果如下所示:
The sum of 8 and 7 equals 30
在Groovy里面插值的用法总结如下所示:
字符类型 | 语法 | 是否支持插值 | 示例 | 输出结果 |
---|---|---|---|---|
单引号 | '..' | 否 | def name="Surpass";println 'Hello,${name}' | Hello,${name} |
双引号 | ".." | 是 | def name="Surpass";println "Hello,${name}" | Hello,Surpass |
三单引号 | '''..''' | 否 | def name="Surpass";println '''Hello,${name}''' | Hello,${name} |
三又引号 | """..""" | 是 | def name="Surpass";println """Hello,${name}""" | Hello,Surpass |
2.4.4.1.5 常用方法
- 1.判断是否包含特定内容
判断是否包含特定内容一般使用方法contains
,示例如下所示:
def hello="Hello , Surpass"
def containStr="Surpass"
if (hello.contains(containStr)){
println "${hello} contains ${containStr}"
}else{
println "${hello} not contains ${containStr}"
}
- 2.查看字符串长度
查看字符串长度一般使用方法length
或size
,示例如下所示:
def hello="Hello , Surpass"
println hello.size()
println hello.length()
- 3.转换为字符串
转换为字符串长度一般使用方法toString
,示例如下所示:
def number=123
println number instanceof String // false
println number.toString() instanceof String // true
- 4.判断以特定内容开始或结束
转换为字符串长度一般使用方法startsWith
和endsWith
,示例如下所示:
def hello="Hello,Surpass"
println hello.startsWith("Hello") // true
println hello.endsWith("Surpass") // true
- 5.转换大小写
转换为字符串长度一般使用方法toUpperCase
和toLowerCase
,示例如下所示:
def hello="Hello,Surpass"
println hello.toUpperCase() // HELLO,SURPASS
println hello.toLowerCase() // hello,surpass
- 6.分隔字符串
转换为字符串长度一般使用方法split
,示例如下所示:
def hello="Hello,Surpass"
def splitStr=hello.split(",") // 输出为字符数组 [Hello, Surpass]
for(item in splitStr){
println item
}
使用
split
方法需要注意,默认是支持正则表达式
,因为特殊字符需要转义
- 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 数值类型
2.4.4.2.1 int类型
Groovy中常见的数值类型有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
,系统会进行类型推断,示例如下所示:
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
对于人类而言,平时接触更多的是十进制
的数字,Groovy也支持非十进制的数字,例如二进制
、八进制
、十六进制
,表示方法如下所示:
- 二进制:以
0b
开始 - 八进制:以
0
开始 - 十六进制:以
0x
开始
示例如下所示:
def binaryNum=0b111
def octalNum=012
def hexNum=0xFF
println binaryNum
println octalNum
println hexNum
输出结果如下所示:
7
10
255
2.4.4.2.2 浮点型
在Groovy中,常见的浮点类型主要有float
和double
,示例如下所示:
float f=7.18
double d=3.1415926
除以上声明浮点数据后,也可以使用科学计数法
,使用E
或e
进行表示,示例如下所示:
def a=1e3
def b=1E-3
assert a==1000
assert b==0.001
2.4.4.3 bool类型
在Groovy中,bool类型只有两个值true
和false
,常用于逻辑判断等场景,示例如下所示:
def boolVariableA=true
boolean boolVariableB=false
assert boolVariableA
assert !boolVariableB
2.4.4.4 List类型
2.4.4.4.1 基本定义
在Groovy中使用中括号[]
来定义List,各个元素间使用逗号,
来分隔元素,示例如下所示:
def numbers=[1,2,3]
def personInfo=["Surpass",28,"Shanghai"]
2.4.4.4.2 常用方法
- 1.获取List长度
获取List长度可以使用其方法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的元素值,使用对应的索引
即可,索引从0开始
,示例如下所示:
def personInfo=["Surpass",28,"Shanghai"]
personName=personInfo[0]
personLoc=personInfo[2]
- 3.添加List元素值
向List添加元素,可以使用add
方法或使用符号<<
,示例如下所示:
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.判断是否存在交集
判断两个List是否有交集,可以使用方法intersect
def personInfoA=["Surpass",28,"Shanghai"]
def personInfoB=["Surpass"]
println(personInfoA.intersect(personInfoB)) // 输出结果:[Surpass]
- 6.List去重
List去重可以使用方法unique
def personInfo=["Surpass",28,"Shanghai","Surpass"]
println(personInfo.unique()) // 输出结果:[Surpass, 28, Shanghai]
- 7.判断是否包含某元素
判断List是否包含某元素可以使用方法contains
def personInfo=["Surpass",28,"Shanghai","Surpass"]
println(personInfo.contains("Surpass")) // 输出结果: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
}
最终的输出结果如下所示:
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]
进行定义,多个key-value之间使用,
进行分隔,示例如下所示:
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是否包含某个key或value
判断Map是否包含某个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
}
最终的输出结果如下所示:
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