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} 会被替换成变量的值
  • 相关阅读:
    [C++]C++11右值引用
    [cocos2d-x]registerScriptHandler和registerScriptTapHandler区别
    [深度探索C++对象模型]关于成员初始化列表(member initiallization list)
    [深度探索C++对象模型]memcpy和memset注意事项
    sql server isnull函数
    sql server 数据类型
    sql server SQL 服务器
    案例:按钮拖动移动
    PHP 随笔记
    laravel5 事务回滚
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13782208.html
Copyright © 2011-2022 走看看