zoukankan      html  css  js  c++  java
  • Groovy In Action 笔记 (4) -- String相关

    String类型作为使用频率最高类,大部分语言对此类型做了特殊的优化,如Java中的String Pool, 用来避免不停地在堆中实例化相同的字符串,从而提高效率。

    下面介绍一下Groovy中的String类型的一些操作,代码如下:

    //Strings
    
    //literal string
    def words = "Hello"
    
    assert words.class.name == String.name
    
    //GString
    def words_gstr = "${words} world"
    
    def words_gstr_literal = '${words} world'
    
    assert words_gstr instanceof GString
    assert !(words_gstr instanceof String)
    
    assert words_gstr_literal == "${words} world" // 单引号里面的${}不会执行替换操作
    assert words_gstr == "Hello world" // 此处Groovy override了 == 操作 具体逻辑如下:
    /**
     *     public boolean equals(Object that)
     *     {*
     *          if (that instanceof GString)
     *              {*
     *                  return equals((GString) that);
     *               }
     *         return ;
     *     }
     *     public boolean equals(GString that)
     *     {*
     *      return toString().equals(that.toString());
     *     }
     * */
    
    
    //Operators
    assert words.toUpperCase() == "HELLO"
    assert words.toLowerCase() == "hello"
    assert words.getAt(0) == "H"
    assert words[0] == "H"
    assert words[1..3] == "ell" // range,和Python 略有不同,此处包括了index=3的元素
    assert words[1..<3] == "el" // range,不包括最后一个index=3的元素, [1..>3]为非法
    assert words - "H" == "ello" // 直接删除H,groovy中override了-操作
    assert words.size() == 5 // 注意 groovy中 size 函数被广泛添加到多种类中,从而统一了取长度的操作
    
    //closure
    words.each {println(it)} //打印每个字符,每个字符一行, it为闭包的默认形参名,相当于 words.each {ch -> println(ch)}, 关于闭包,后续详解
    
    //multiple quotes
    def words_single_quotes = '''Hello
        world ${words}
    '''
    
    println(words_single_quotes) // 输出包括了换行,且 ${words} 不会被替换成变量的值
    
    def words_double_quotes = """Hello
        world ${words}
     """
    
    println(words_double_quotes) // 输出包括了换行,且 ${words} 会被替换成变量的值
  • 相关阅读:
    fork和Vfork的区别
    exer4.13.c(undone)
    Exer4.6.c(undone)
    好习惯
    c语言中的register修饰符
    请教如何在页面之间传递dataSet?不用session
    ultraEdite编辑shell或perl程序时注意
    PowerBuilder程序中取数据库中值,值异常(正数变成负数或异常)
    pb程序的编译发布
    关于sql server2000 的1068 与 1069 问题
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13782208.html
Copyright © 2011-2022 走看看