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