美文网首页
groovy基础

groovy基础

作者: YyuTtian丶 | 来源:发表于2018-12-14 15:09 被阅读0次

变量

groovy中没有基本类型的变量,都是对象类型的。定义的int也会被转成Integer类型。

int x = 10
//输出结果为 class java.lang.Integer
println x.class

double d =3.14
//输出结果为 class java.lang.Double
println d.class

弱类型定义方式

def a = 3.14
//输出结果为 class java.math.BigDecimal
println a.class

可以为一个变量多次改变类型

def aa = 12
//输出结果为 class java.lang.Integer
println aa.class

aa='12'
//输出结果为 class java.lang.String
println aa.class

字符串

def s = '111'
//输出结果为 class java.lang.String
println s.class

 s = "222"
//输出结果为 class java.lang.String
println s.class

s = """
333
333
"""

//输出结果为 class java.lang.String
println s.class

一个单引号、两个单引号和三个单引号表示的都是java.lang.String的字符串。三个单引号定义的字符串可以保留字符串的格式,可以按照格式输出三个单引号里面的字符串。

def ss = "groovy"
def ss2 = "hello ${ss}"
//输出结果为 class org.codehaus.groovy.runtime.GStringImpl
println ss2.class

${} 大括号内可以放任意的表达式,例如:

def sum = "1+1=${1 + 1}"
//输出结果为1+1=2
println sum

GString类型和String类型可以相互转换,不需要强转。

def s = "groovy"
def ss = "hello ${s} "
def result = ehco(ss)
//输出结果为 class java.lang.String
println result.class

//传入的是GString类型的 参数是String类型的 返回值是String类型的  说明GString和String可以互相转换
String ehco(String s) {
    return s
}

字符串常用方法

def str = "groovy"
def result = str.center(8, 'a')
//输出结果为 agroovya  以str为中心 两边填充
println result

//只有一个参数的话  用空格填充
result = str.center(10)
println result

result = str.padLeft(10, 'a')
//输出结果为 aaagrooovy  左边填充
println result

result = str.padRight(10, 'a')
//输出结果为 grooovyaaa  右边填充
println result


def str = 'hello'
def str2 = 'groovy'
//输出结果为true 字符串也可以用 > < == 来比较
println str > str2

//输出结果为 e 可以通过类似于数组下标的方式  获取字符串中的某一个字符
println str[1]

//输出结果为 hel 可以通过传入一个范围来取一个字符串片段  首尾闭合区间 包含下标0 和下标2
println str[0..2]

def str = 'hello groovy'
def str2 = 'groovy'
//输出结果一样  结果为 hello  意思是从str中去掉和str2一样的字符串
println str - str2
println str.minus(str2)

//输出结果为yvoorg olleh  可以将字符串倒序
println str.reverse()

//输出结果为 Hello groovy  可以将字符串的首字母大写
println str.capitalize()

//输出结果为 false 判断字符串是否都是数字
println str.isNumber()

//将字符串转成其他类型 toInteger toDouble 等等
println str.toDouble()

逻辑语句

switch case

def x = 1.23
def result
switch (x) {
    case 'foo': result = 'foo'; break
    case 'bar': result = 'bar'; break
    case [4, 5, 6, 'list']: result = 'list'; break//列表
    case 12..30: result = 'range'; break//范围
    case Integer: result = 'integer'; break
    case BigDecimal: result = 'bigdecimal'; break
    default: result = 'defaule'
}

//输出结果为 bigdecimal  case里面可以是任意的对象类型
println result

对范围的for循环

def sum = 0
for (i in 0..100) {
    sum += i
}
//输出结果为5050 包含头和尾
println sum

对list的循环

def sum = 0
for (i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) {
    sum += i
}
//输出结果为55 包含头和尾
println sum

对map的循环

for (i in ['key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5']) {
    println 'key='+i.key+"  value="+i.value
    //输出结果为
    //key=key1  value=value1
    //key=key2  value=value2
    //key=key3  value=value3
    //key=key4  value=value4
    //key=key5  value=value5
}

闭包

//闭包就是{}括起来的代码块
def clouser = { println 'hello groovy' }
//调用闭包 方式1
clouser.call()
//调用闭包 方式2
clouser()

带参数的闭包

//用 -> 区分参数和代码块   左边的是参数 右边的是逻辑
def clouser = { name, age -> println "name is  ${name},age is ${age}" }
clouser.call("qgl", 25)
clouser("qgl", 25)
//输出结果为 name is  qgl,age is 25

闭包的默认参数

//闭包有一个默认参数  it
def clouser = { println "name is ${it}" }
//输出结果为 name is tom
clouser("tom")

闭包的返回值

//闭包一定有返回值
def clouser = { return "name is ${it}" }
//输出结果为 name is joy
println clouser("joy")

clouser = {println "name is ${it}"}
//输出结果为null  闭包里没有return的话 就return一个null
println clouser("jack")

求一个数的阶乘

int x = 3
//求一个数的阶乘
int fab(int number) {
    int result = 1
    //从1增加到number   闭包中是每次增加后执行的逻辑
    1.upto(number, { num -> result *= num })
    return result
}
//输出结果为6
println fab(x)

int fab2(int number) {
    int result = 1
    //如果一个方法的最后一个参数是一个闭包的话  这个闭包可以写在方法的外面
    number.downto(1) {
        num -> result *= num
    }
    return result
}
//输出结果为6
println fab2(x)

求和

int cal(int number) {
    int result
    //times不包含最后一个值 所以1-100的和 要传入101才可以  因为times的起始值是0 所以不能用来求阶乘
    number.times {
        num -> result += num
    }
    return result
}

println cal(101)
//输出结果为5050

字符串遍历

String str = "the 2 and 3 is 5"

str.each {
    //输出结果为the 2 and 3 is 5
    temp -> print temp
}

str.each {
    //输出结果为 tthhee  22  aanndd  33  iiss  55  每个字符打印两边
    temp -> print temp.multiply(2)
}

通过find查找符合条件的第一个字符

//通过find查找符合条件的第一个字符
String str = "the 2 and 3 is 5"
println str.find {s ->
        if (s == "2") {
            return true
        }
}

findAll方法返回一个集合

String str = "the 2 and 3 is 5"
//返回一个集合 输出结果为 [2, 3, 5]
println str.findAll {s ->
        if (s.isNumber()) {
            return true
        }
}

any方法返回bool类型的值

String str = "the 2 and 3 is 5"
//返回bool类型的值 返回值为true 如果有一个满足条件 就返回true
println str.any {
    s ->
        if (s.isNumber()) {
            return true
        }
}

相关文章

网友评论

      本文标题:groovy基础

      本文链接:https://www.haomeiwen.com/subject/mrlghqtx.html