• Groovy笔记1(特性,字符串处理,集合,运算符)


    Groovy 特性:
    Groovy = Java - 重复的样板代码
    +可选的动态类型
    +闭包(closures)
    +领域规范语言(DSL)
    +生成器(builders)
    +元编程(metaprogramming)
    Groovy是没有类型/修饰符/方法返回类型/Iterator,不需要导入集合的Java.
    Groovy丢掉了许多Java的包袱。不能确定变量类型时将变量类型设为Object.
    DSL:domain specific languages
    生成器:可以生成XML/HTML/Swing树状数据结构
    元编程:运行时对类增加行为,类似于AOP,java中反射
     
    Groovy自动导入如下包:
    groovy.lang.*
    groovy.util.*
    java.lang.*
    java.util.*
    java.util.regex.*
    java.net.*
    java.io.*
    java.math.BigDecimal
    java.math.BigInteger
     
    Groovy的一切都是对象,可以自动装箱与拆箱
     
    1.GDK数值方法:
      3.times{println'Hello'}  执行几次
     
    store=''
    1.upto(5){number->store+=number}(一个数字从多少到多少执行)
     
    store=""
    2.downto(-2){number->store+=number+""}{结果为210-1-2}
     
    store=""
    0.step(0.5,0.1){number->store+=number+""}{结果为00.10.20.30.4}
    

    2.表达式与运算符

    基于方法的运算符(groovy中运算符都是基于方法的简写)
    a==b等价a.equals(b)
    Groovy的“===”就是Java的“==”
    Groovy支持操作符重载,重载运算符对应的方法就是操作符重载
    <<操作符被重载,以支持向集合添加项
    ?安全引用操作符(防止NullPointException),在方法调用前面添加一个?就相当于在调用前面放了一个条件,可以防止在null对象上调用方法。?操作符时刻都非常有用,可以极大地减少条件语句。
     
    基于方法的运算符:
    assert 4**3==64      //4.power(3)
    assert 4/3==1.33333333333//4.div(3)
    assert 4.intdiv(3)==1  //整除
    assert !(4==3)   //!(r.equals(3))
    assert 4!=3   //!4.equals(3)
    asser 4<=>3==1  //4.compareTo(3)
    

     3.字符串GString简介:

    groovy中字符串可以用单引号与双引号引用。
    但是如果字符串有变量,则要用双引号,否则输出原字符串
    def name ='lxl800'
    print "\thello ${name}"
     
    原格式输出:
    print '''
          aaa
          bbb
          '''
    

    三个双引号可以解释其中的GString

    def name="lxooi"
    print """
       aaa 
      \tbbb
      ${name}
    ...."""
    

    4. Groovy方法:

    可以直接使用Java的方法
    变量作用域与Java方法类似
    可以使用动态类型或静态类型
    可以省略return,默认返回最后语句的值
     
    Groovy方法可以使用默认参数。
    def welcom2(name,welcomStr="Welcomd"){
     print "${welcomeStr} ${name}"
    }
    welcome2('1xt') //输出:Welcome 1xt
    welcome2("1xt",'Good')//输出Good 1xt
    

    优先选择精确匹配参数个数的方法。

    方法参数是传值调用
    在方法内部修改的参数是副本,实际上并没有修改真正的参数
     
    5. 流程控制:判断
    if的条件除了布尔值外,也可以是对象,如果对象是空则条件为false,如果不为空则为true.
     
    switch结构二
    def var=0
    switch(var){
    case 0: println "one"
    case 11..20 println "two"
    case '10' println "three"
    case [1,2,3]: println "four"
    case {it % 3==0}: println "six"
    case ~'[0-9]{3}': println "seven"
    default: println "Default"
    }
    

    switch参数可以为任意的数值

     
    6. 控制台输入输出
    读取标准输入:
    def name = new BufferedReader(new InputStreamReader(System.in)).readLine()
    println "your name is :${name}"
    

     

    7.集合概述:
    1.Groovy直接在语言内使用集合。
    不需要导入专门的类,也不需要初始化对象
    集合是语言本身的本地成员
    2.每个Groovy集合都是java.util.Collection或java.util.Map的实例
    3.List,String,StringBuffer,Range,Map,File,Matcher都使用统一的size()方法获取长度。
     
    7.1 列表List(中括号在groovy中可以表示列表)
    def toys=[['a','001'],['b','002'],['c','003']]
    println toys.class //输出java.util.ArrayList
    println toys[1]
    println toys.get(1)
    println toys[-2] //输出倒数第二个
    println toys[1..<2]//输出从1开始排除第二个的所有元素
    toys.putAt(2,[33,'333'])也是修改
    toys<<[4,'004']//追加元素
     
    //连接列表
    toys1=[1,2,3]
    toys2=toys1+[4,5]
     
    toys3=toys2-[5]//列表中删除元素
     
    def list=[1,2,3,4]
    list.add(5)//1,2,3,4,5
    list.add(2,11)//1,2,11,3,4,5
    list.addAll([6,7])//1,2,11,3,4,5,6,7
    list.contains(11)//true
    list.containsAll([11,4])//true
    list.indexOf(11)//2
    list.remove(2)//1,2,3,4,5,6,7
    list.removeAll([5,6,7])//1,2,3,4
    list.clear()//[]
    特别注意有些方法会修改原列表,有些方法不修改原列表,而只是产生新的列表。其中差异不能不防!!
    def fList=[1,2,3,[4,5]]
    fList.flatten()//[1,2,3,4,5],展开后返回新列表,原列表并没有修改
    fList.intersect([3,4,5])//[3],求交集,返回新列表
    fList.pop()//[4,5],删除列表最后元素
    fList.reverse()//[3,2,1],反转列表返回新列表
    fList.sort()//[1,2,3]
     
    def gList=[1,1,2,3,4,3]
    println gList.count(3) //输出:2有两个3
    

    7.2 映射:

    def bookMap=[:]//定义空map
    println bookMap.getClass()//输出:class java.util.LinkedHashMap
     
    def toyMap=[1:'toy1',2:'toy2']
    assert toyMap.containsValue('toy1')//true
    assert toyMap.containsKey(1)//true
     
    println toyMap//输出整个map
    println toyMap[2]//用下标输出键对应的值
    println toyMap.get(1)//get(key)
     
    toyMap.each{
    toy->
    println toy.key+":"+toy.value
    }//each方法参数为闭包
     
    toyMap.each{
    println it.key+":"+it.value
    }//使用默认闭包参数it遍历map
     
    toyMap.put(3,'toy3')//往map中加入元素,如果键存在,则替换
    toyMap.remove(3)//按键删除
    toyMap.keySet()//获取Map中的key
    toyMap.values()//获取map中的值
    toyMap.values().asList()//转换成ArrayList
    

     

    7.3 范围
    def aRange =1..<5
    println aRangee//输出:【1,2,3,4】
    println aRangee.class//输出class groovy.lang.IntRange
    assert aRange instanceof List //true
    (1..<5)范围就是IntRang的对象,是特殊的List
     
    def bRange='a'..<'e'
    println bRange//输出:【'a','b','c','d'】
    prinltn bRange.class//输出 groovy.lang.ObjectRange
    assert bRange instanceof List //true
    ('a'..<'e')是ObjectRange的对象,是特殊的List
     
    def cRange=5..1
    println cRange //输出5,4,3,2,1
     
    def dRange='e'..<'a'
    println dRange//输出e,d,c,b
    

    在groovy中范围可以使用倒序

     
    def eRange=1..10
    println eRange.size()//输出10
    println eRange.contains(5)//true
    println eRange.get(8)//参数为索引,输出9
    println eRange.getFrom()//输出1,返回第一个
    println eRange.getTo()//输出10
    println eRange.isReverse()//输出false
    prinltn eRange.subList(3,6)//输出【4,5,6】
     
    groovy字符串处理方法:
    def 'Groovy&Grails&l008'
    println str1[1..2]//ro
    println str1[1..<3]//ro
    println str1[4..2]//voo
    println str1[4,1,6]//vr&
    

    <=>符号类似于compareTo()方法,只是<=>返回的-1,0,1.而compareTo()方法返回的则是一个字符比较的值

    println 'Groovy'*3//GroovyGroovyGroovy
     
    def str2="Groovy"
    println'[${str2.center(11)}]'//[  Groovy   ]
    println '[${str2.center(3)}]'//[Groovy]
    println'[${str2.center(11,"=")}]'//[==Groovy===]
     
    println'${str2.contains("Gr")}'//true
     
    println "${str2.count('o')}"//2
    println "${str2.count('oo')}"//1
    println str2.leftShift(' world')//Groovy world
    println str2<<" world"//Groovy world
     
    printlnstr2.minus('vy')//Groo
    printlnstr2-'vy'//Groo
     
    printlnstr2.next()//Groovz ++运算符
    println str2.previous()//Groovx --运算符
     
    def str3 = "lxt008"
    println '[${str3.padLeft(4)}]'//lxt008
    println '[${str3.padLeft(11)}]'//[    lxt008]
    println '[${str3.padLeft(11,"#")}]'//[#####lxt008]
    //padRight()类似
     
    def str4 = "Groovy&Graids&lxt008"
    prinlt str4.replaceAll('[a-z]'){ch->ch.toUpperCase()}//GROOVY&GRAILS&LXT008
    println str4.toCharacter()//G
    println '123'.toDouble()
    //toFloat()/toInteger()/toLong()类似
    println str4.toList()//['G','r','o'..]
     
    println str4.tokenize()//["Groovy&Grail&lxt008"],无空格(默认根据空格来分词)
    println str4.tokenize('&')//["Groovy","Grails","lxt008"]返回一个list
    

     

  • 相关阅读:
    函数表达式
    BOM
    让超出容器高度的内容滚动显示但不出现滚动条
    插件书写示例
    php中redis的安装
    日常工作bug总结
    pip freeze requirements.txt命令迁移模块
    Django18-中间件和cache实现限制用户访问频率
    Django17-文件上传下载
    Django16-cache缓存
  • 原文地址:https://www.cnblogs.com/wn398/p/3023199.html
Copyright © 2020-2023  润新知