用了一段时间的ruby再回来继续看Java,感受在语法的优雅程度以及完成相同的功能所须要的代码量确实都相差甚远,不过好在如今java虚拟机上运行的程序也不必定要彻底用java语言来开发,打算尝试下jvm上的多语言编程,备选目标有JRuby、Scala和Groovy,考虑到只是为了和Java语言协助开发,同时考虑到对Java框架的支持,以及发现intellij idea不须要额外插件就支持Groovy,就选择了Groovy进行学习。
java
Groovy支持整数和浮点数,没有小数点的数值默认为整数,都是Integer类的实例,包含正数、负数和零;有小数点为浮点数,是BigDecimal类的实例,必须避免以小数点开始。正则表达式
须要特殊注意的是,整数除以整数获得的结果必定是一个浮点数,若是想要只取整数部分值,使用intdiv方法,如:编程
13.intdiv(5)结果是2;求模运算中包含浮点数是非法的,会提示mod方法被错误地调用。ruby
(1)Groovy运算符都是对象某方法的重载,如:
框架
5 + 3 => 5.plus(3)jvm
5 - 3 => 5.minus(3)ide
5 * 3 => 5.multiply(3)学习
5 / 3 => 5.divide(3)idea
5 % 3 => 5.mod(3)spa
(2)运算符优先级相对于C语言没什么特殊
Groovy使用def来申明一个变量,变量命名规则:
必须由字母和数字组成
大小写敏感
首字母必须是字母
下划线容许出如今命名中,以字母看待
不容许为关键字
(1)Groovy除了可使用单引号(')和双引号(")来封装字符串外还支持三引号("""),三引号表示字符串包含多行文本与ruby的here doc相似,如
"""hello Groovy and Java"""
同时,单引号中的字符串不能用内插,规则与ruby相同,如:
def age = 24 'My age is ${age}' //My age is ${age} "My age is ${age}" //My age is 24 """My age is ${age}""" //My age is 24 "My age is \${age}" //My age is ${age}
(2)经过字符索引获取子字符串,支持以下几种格式:
def str = "Hello world" str[4] //o str[-1] //d str[1..2] //el str[1..<3] //el str[4..2] //oll str[4,1,6] //oew
(3)字符串的基本方法:
def str = "Hello world" 'Hello' + ' world' //Hello world 'Hello' * 3 //HelloHelloHello str - 'o world' //Hell str.size() //11 str.length() //11 str.count('o') //2 str.contains('ell') //true str.leftShift(' world') //Helloworld, 等价于str << ' world'
同Java的String对象同样Groovy的字符串值不可改变
Groovy经过包含附加方法的方式扩展了JDK中的类,String类也多了许多实用方法,详细见API
(3)字符串的比较:
str 1 == str2,等价于str1.equal(str2);str1 <=> str2,等价于str1.compareTo(str2)
(4)正则表达式:
Java中使用正则表达式主要是matches方法和replaceAll方法,Groovy中也可使用,如:
"abc".matches("abc") //true "abc".matches("bc") //false "abc".replaceAll("bc", "")//"a"
同时Groovy支持~来定义以及匹配正则表达式:
class Test { static main(args) { def regex = ~'hello';//定义正则表达式, ~紧接则字符串双引号单引号均可以 def matcher = ("hello world" =~ "hello");//建立一个Matcher对象,~紧跟在=后面 println regex.class;//class java.util.regex.Pattern println regex;//hello, 等价于regex.toString; println matcher;//java.util.regex.Matcher[pattern=hello region=0,11 lastmatch=hello], matcher.toString() println matcher.find();//true println matcher.matches();//false if ("hello world" =~ regex) { println true;//会打印出true } if ("hello world" =~ "hello") { println true;//会打印出true } } }
能够看出if或者while中的=~ 其实至关于"string".find("sring2"或者Regex对像),而Groovy还提供了另外一个匹配符 ==~ ,至关于String的matches方法。
正则表达式的^ $ * +等的运用这里就不作描述了,有兴趣的请自行产考正则表达式用法。