Jenkins实践指南-03-Groovy基础知识02

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.查看字符串长度

    查看字符串长度一般使用方法lengthsize,示例如下所示:

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.判断以特定内容开始或结束

    转换为字符串长度一般使用方法startsWithendsWith,示例如下所示:

def hello="Hello,Surpass"
println hello.startsWith("Hello") // true
println hello.endsWith("Surpass") // true
  • 5.转换大小写

    转换为字符串长度一般使用方法toUpperCasetoLowerCase,示例如下所示:

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中常见的数值类型有bytecahrshortintlongjava.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中,常见的浮点类型主要有floatdouble,示例如下所示:

float f=7.18
double d=3.1415926

    除以上声明浮点数据后,也可以使用科学计数法,使用Ee进行表示,示例如下所示:

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

2.4.4.3 bool类型

    在Groovy中,bool类型只有两个值truefalse,常用于逻辑判断等场景,示例如下所示:

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值,一般使用方法getmap[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,一般使用方法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
}

    最终的输出结果如下所示:

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容