1. 程式人生 > 實用技巧 >Groovy In Action 筆記 (4)

Groovy In Action 筆記 (4)

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} 會被替換成變數的值