Groovy - 字符串

一、索引取值

字符串索引从 0 开始

def str = "abcdefg"

println str[-1]         // g 获取字符串倒数第一个的值
println str[2]          // c 
println str[0,2,3]      // acd 获取多个下标的值,用“,”号隔开
println str[0..3]       // abcd 获取字符串 第一个到第四个的值,可用于截取
println str[0..<4]       // abcd 获取字符串 第一个到第四个的值,可用于截取 “《” 指不包含下标4 的那个
println str[4..1]       // edcb 从第5个开始 往回截取到 第2个
println str[4..-1]      // efg 从第五个开始 截取到 最后一个

二、复制字符串 “*” 

注意:字符串中 * 不是算数运算符,不能当乘法用,如 “1”*3 

结果应为 : “111”,而不是 3

def str  = "陈"
println str*3
//陈陈陈

三、获取长度:str.length()  /  str.size()

中文字符串、英文、数字字符串长度都只占一个字节,在java 中 中文占2个字节

def str  = "大珠小珠落玉盘"

println str.length() //7

def str2 = 'abcd'

println str2.length() //4

四、字符串操作

        1、字符串查询:str.indexOf("str2")  返回 字符指定字符首次出现的下标,未查询到则返回-1   。

def str  = "大珠小珠落玉盘"

println str.indexOf("珠")  //1 

//第二个参数表示从哪个下标开始检索
println str.indexOf("珠",4)  //-1

        2、字符串截取:strs.subString()

str.subString(beginIndex,endIndex)   :下标从0开始,属于开闭和空间,即可[beginIndex,endIndex)  解释为:包含beginIndex,不包含 endIndex

def str  = "大珠小珠落玉盘"

println str.substring(1) //珠小珠落玉盘 从第二个截取 截取到末尾

println str.substring(0,4) //大珠小珠 

        3、字符串替换:str.replaceAll("替换元素","值")

def str = "hello world"
str = str.replaceAll("l","a")
println str

//heaao worad

println webVersion.replaceAll("\n","")		//替换字符串后面的换行符

def url = "http://www.baidu.com"
println url.replaceAll("http(s)?:","")		//替换http:或者https:为空

url = "https://www.baidu.com"
println url.replaceAll("http(s)?:","")		//替换http:或者https:为空

        4、字符串分割成数组:str.split("分隔符") / str.tokenize("分隔符")

def str = "hello world"
println  str.split("l")  
//返回数组,允许保留空字符串 [he, , o wor, d]


println str.tokenize("l")
//返回list,不会保留空字符串  [he, o wor, d]

        5、大小写转换:str.toUpperCase()、str.toLowerCase()

def str = "hello-World"
println str.toUpperCase()  //HELLO-WORLD
println str.toLowerCase()  //hello-world

        6、字符串忽略大小写比较:str.compareToIgnoreCase("str2")

def str  = "hello-world"
def str2 = "HELLO-WORLD"
def str3 = "hello-w"
def str4 = "hello-worldaa"
println str.compareToIgnoreCase(str2)  //0 等于
println str.compareToIgnoreCase(str3)  //4  str 大
println str.compareToIgnoreCase(str4)  //-2 str 小

        7、判断是否以指定字符串开头/结尾:str.startsWith("xx")   /   str.endsWith("xx")

def str  = "hello-world"

println str.startsWith("he")  //true
println str.startsWith("hd")  //false

println str.endsWith("ld") //true
println str.endsWith("0d") //false

        8、字符串的拼接 :str +=str2  / str = str.concat(str2)

def str  = "hello"
str+="world"
//或者  str = str.concat("world")
println str  

//helloworld

        9、字符串删除:  str -= str2

def str  = "hello world"
str-="ld"

println str  // hello wor

        10、统计指定字符串出现的次数:str.count("xx")

def str  = "hello world"

println str.count("l") //3

        11、查询是否包含某字符串:str.contains("xx")

def str  = "hello world"
println str.contains("ld")  //true

        12、判断是否为数字

def str = '1106502'
if(!str.isInteger() && !str.isFloat()) {
      println "不是数字"
}else{
  println "是数字"
}
println str

//是数字
//1106502

五、其他

         1、闭包

def clos={param -> println "Hello ${param}"}
clos('World') //Hello World
//或者cols.call('World')



//使用隐参数it
clos={println "Hello ${it}"}
clos('World') //Hello World

        2、异常处理

try {

}catch(Exception err) {
    throw new Exception("*******Caught an exception: ${err}")
}

//不抛出异常
try {

} catch (ignored) {

}

        3、单引号、双引号、三引号的区别

def str  = "张三"

//单引号字符串,字符串会被原样输出,不进行变量替换或转义字符处理
println 'Hello,${str}'  //Hello,${str}

//双引号字符串,可以进行变量替换和字符串插值。这意味着可以在字符串中嵌入变量或表达式
println "Hello,${str}"  //Hello,张三

//三重双引号字符串允许多行文本,并支持字符串插值和转义字符,进行鸳鸯输出
str2 = """
      1
     222
    33333
   44444444
  5555555555
 666666666666
77777777777777     
"""
println str2

//输出结果
      1
     222
    33333
   44444444
  5555555555
 666666666666
77777777777777    

        4、默认值赋值-Elvis 运算符

class Foo{
    def name = "123"
}
def foo = new Foo()

println foo.name ?:"bob"   //123  如果有值,则为值,类似于三元运算符
//println foo.name == null ? "bob" : foo.name

class Foo2{
    def name
}
def foo1 = new Foo2()

println foo1.name ?:"bob"  //bob  如果空或者null  则默认为 bob

        5、避免空指针-安全解引用操作符?

//此操作符用来避免发生空指针异常的情况,只需要在语句里面添加一个问号(?)即可,看例子。

String name = person?.getName()

//当 person 为 null 时,对应的name 属性也设置为 Null。同样,对方法调用也同样适用。

        6、使用工具类

                (1)  ConfigSlurper

ConfigSlurper实用类用来读取配置信息,它是一种 Groovy 脚本。像 Java 中的*.properties的文件,可以使用“.”导航符进行访问,它也可以应用在闭包的配置的值和任何对象类型中。


def config = new ConfigSlurper().parse('''
appid = '93772j23ysk29vu3m'
secret = 'r2y4j56lj2h00l212g56j34fi23ud8h29123d87kvnc2'
app.date = new Date()
app.version = 3.1
app.name = '愉快办'
app {
    desc = "这是一个很好的app,它的名字叫做${app.name}"
}
''')
def properties = config.toProperties()
println "appid is ${properties.appid}"
println "app.date is ${properties.'app.date'}"
println "app.desc is ${properties.'app.desc'}"

//输出结果
appid is 93772j23ysk29vu3m
app.date is Thu Jan 11 11:52:47 CST 2024
app.desc is 这是一个很好的app,它的名字叫做愉快办

                  (2)  Expando

xpando工具类用来创建动态扩展对象。你可以为对象添加属性和方法,在动态元编程中此类非常实用 

def ex = new Expando()
ex.name = "Dark"
// 或者 ex.name = { -> "Dark"}
ex.say = {String str -> "${ex.name} says:${str}"}
def say = ex.say('hello')
println say  //Dark says:hello

                (3)  PropertyChangeEvent

Groovy 提供了可供观察的 List,Map和 Set。当这些集合在新增,删除,修改元素时会触发PropertyChangeEvent( java.beans package)事件。需要注意的是,这个事件不仅会触发,它还持有属性的名字以及属性的新旧值。

def observ = new ObservableList()
observ << '124'
observ << 'qwe'
println observ
//[124, qwe]
def listen = {e->
    println e
    println "newValue is ${e.newValue},oldValue is ${e.oldValue}"
}
observ.addPropertyChangeListener(listen)
observ[0] = "zhangsan"
observ[1] = "lisi"

println observ


//输出结果

groovy.util.ObservableList$ElementUpdatedEvent[propertyName=content; oldValue=124; newValue=zhangsan; propagationId=null; source=groovy.util.ObservableList@a8eb98cc]

newValue is zhangsan,oldValue is 124

groovy.util.ObservableList$ElementUpdatedEvent[propertyName=content; oldValue=qwe; newValue=lisi; propagationId=null; source=groovy.util.ObservableList@a91c9260]

newValue is lisi,oldValue is qwe

[zhangsan, lisi]

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_37131747

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值