操作符重载:可以在自己的类上随意地使用操作符,只需要实现相应的方法就可以了。因为操作符的重载在程序的简洁性、可阅读性上有很大帮助,这里列举可重载的操作符:
a + b:plus
a - b:minus
a * b:multiply
a / b:div
a % b:mod
a++/++a:next
a--/--a:previous
a**b:power
a | b:or
a & b:and
a ^ b:xor
-a:negate
a[b]:getAt
a[b] = c:putAt
a << b:leftShift
a >> b:rightShift
a >>> b:rightShiftUnsigned
switch(a){case b: TODO}:isCase
a == b:equals
a <=> b:compareTo
a as type:asType
Groovy有两种字符串:java.lang.String和groovy.lang.GString,在GString可以通过$引用到一个变量,下面看Groovy中字符串的用法:
a = 'like this $c'; // java.lang.String
b = "like this $a"; // 如果包含$则为groovy.lang.GString,否则为java.lang.String,此时b = 'like this like this $c'
c = '''
like this$c
''' // 多行字符串,但是仍然为java.lang.String,各行间'\n'
d = """
like this$c
""" // 多行字符串,如果包含$则为groovy.lang.GString,否则为java.lang.String,各行间'\n'
e = /\d/ // 字符串内容不转义'\',在正则处理的时候使用阅读性会提高很多
作为GDK吸引人的特性,groovy在字符串中包含许多有用的to*方法,比如toInteger、toFloat等。在进行字符串拼接操作时用到的是StringBuffer:
print "hello " << "world";
在groovy中可以使用正则实现如下功能:
1、是否完全匹配整个字符串。
2、字符串中的是否存在匹配上的串。
3、匹配成功的数目。
4、根据每个成功匹配的结果做一些工作。
5、替换成功匹配的结果。
6、使用匹配结果作为分割符号,将字符串分割成多个子字符串。
下面是一些正则用法的代码:
// ~用在字符串之前,会将字符串编译成Pattern
def shoutedWord = ~/\b[A-Z]+\b/;
// =~将操作符左边的字符串跟右边的Pattern进行局部匹配,返回值为Matcher
def matcher1 = ("finda" =~ /find/)
assert "find" == matcher1[0]
// matcher可能为空,那么上面的代码就会报错,最好用matcher.matches进行判断
def matcher = "foobazaarquux" =~ "o(b.*r)q"
def lst = []
if (matcher.matches()) {
list = matcher[0]
}
assert ["obazaarq", "bazaar"] == lst //FALSE
// ==~用法跟=~类似,只是这里进行的精确匹配,即左边的整个字符串跟左边的模式进行匹配,返回的结果是Boolean
def matcher2 = ("finda" ==~ /find/)
assert java.lang.Boolean == matcher2.getClass()
// 将满足正则表达式的第一个字符串进行替换
assert "Green Eggs and Spam" == "Spam Spam".replaceFirst(/Spam/, "Green Eggs and")
// 将所有满足正则表达式的字符串进行替换
assert "The armor was colored silver" == "The armour was coloured silver".replaceAll(/ou/, "o")
// replaceAll的第二个参数可以使用闭包
def dashedToCamelCase(orig) {
orig.replaceAll(/-(\w)/) { fullMatch, firstCharacter -> firstCharacter.toUpperCase() }
}
assert "firstName" == dashedToCamelCase("first-name")
// 可以用正则对集合进行改造
assert ["foobar", "bazbar"] == ["foobar", "bazbar", "barquux"].grep(~/.*bar$/)
assert ["foobar", "bazbar"] == ["foobar", "bazbar", "barquux"].findAll { it ==~ /.*bar$/ }