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} 会被替换成变量的值

 

posted @ 2020-10-08 18:24  ZackZhou  阅读(136)  评论(0编辑  收藏  举报