美文网首页
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