Groovy笔记(二)之字符串

文章目录

字符串

  1. groovy不区分""'' ,都是字符串String类的实例。如果要创建一个字符'a' as char

  2. groovy会把使用单引号创建的String作为一个常量,如果里面放了任何表达式,Groovy并不会计算它们

  3. java的字符串是不可变的,Groovy的字符串也同样,一旦创建一个字符串实例,就不能修改

  4. Groovy支持惰性求值,即把一个表达式存在一个字符串中,稍后打印。Groovy并不会简单地因为使用双引号或者正斜杠就创建一个GString实例,它会只能地分析字符串,以确定该字符串是否可以使用一个简单的普通String

        class StringTest {
            public static void main(String[] args) {
                def value = 25
                //输出: this is value 25
                println "this is value ${value}"
                //输出:this is value ${value}
                println 'this is value ${value}'
                //输出:this is "value"
                println 'this is "value" '
        
        
                def str = 'JANNAL'
                def str2 = "JANNAL"
                //输出:java.lang.String
                println str.getClass().name
                println str2.getClass().name
        
                //可以通过[]操作符读取,输出N
                println str[3]
                try {
                    //尝试修改字符,会抛出异常
                    str[3] = 'k'
                } catch (ex) {
                    println ex
                }
        
        
                def username = new StringBuilder("jannal")
                def text = "My name is $username"
                //输出:My name is jannal
                println text
                //输出:org.codehaus.groovy.runtime.GStringImpl
                println text.getClass().name
        
            }
        }
    
    
    

GString

  1. 多行字符串使用’’’***’’’

        //多行字符串
        
        def line = '''
        aaaaa
        bbbbb
        ccccc
        '''
        println line
        //java.lang.String
        println line.getClass().name
    
    
  2. 惰性求值:当一个GString实例求值时,如果其中包含一个变量,该变量的值就简单的打印到一个Writer,通常是一个StringWriter。如果GString包含一个闭包,则闭包就会被调用.如果闭包接收一个参数,GString会把Writer对象当做一个参数发送给它。如果闭包没有任何参数,GString会简单调用该闭包,并打印我们想返回给Writer的结果。如果闭包接收的参数不止一个,则调用失败,抛出异常

        price = 6000
        company = 'Google'
        quote = "Today $company stock closed at $price"
        //输出结果:Today Google stock closed at 6000
        println quote
        
        
        stocks = [Apple: 7000, Microsoft: 9000]
        /**
         * 输出结果
         * Today Google stock closed at 6000
         * Today Google stock closed at 6000
         * 不能修改Gstring所绑定的内容
         */
        stocks.each { key, value ->
            company = key
            price = value
            println quote
        }
        
        /**
         * 输出:
         * Today Apple stock closed at 7000
         * Today Microsoft stock closed at 9000
         */
        companyClosure={it.write(company)}
        //companyClosure={->company} 与上面等价
        
        priceClosure={it.write("$price")}
        //priceClosure={->price} 与上面等价
        quote = "Today ${companyClosure} stock closed at ${priceClosure}"
        
        stocks.each { key, value ->
            company = key
            price = value
            println quote
        }
        
        
        //使用闭包解决(闭包没有任何参数可以省略it)
        quote = "Today ${-> company} stock closed at ${-> price}"
        /**
         * 输出:
         * Today Apple stock closed at 7000
         * Today Microsoft stock closed at 9000
         */
        stocks.each { key, value ->
            company = key
            price = value
            println quote
        }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值