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
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 = """
33333
44444444
5555555555
666666666666
77777777777777
println str2
//输出结果
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]
##
Groovy
字符串
前言:因为笔者本身就有
Java
基础,因此在学习
Groovy
时,主要学习
Groovy
与
Java
的区别,相同之处就不再花时间去学习了。这次来了解一下
Groovy
中
字符串
的基础部分,看看
Groovy
和
Java
定义
字符串
有什么不一样的地方。
Groovy
字符串
的分类;
Groovy
字符串
的4种定义方式;
String 和 GString 的哈...
常量文本字符(text literals)代表了字符链形式的一种东西,叫
字符串
。
groovy
可以直接实例化
java
.lang.String对象。GString在其他
语言
里也叫插值
字符串
。
单引号
字符串
就是纯的
Java
字符串
,不支持插值操作。所有的
groovy
字符串
都可以使用'+'连接操作
三引号
字符串
def str = "
Groovy
is a powerful dynamic language for the JVM."
def strArr = str.split(" ")
这样,strArr就是一个包含每个单词的
字符串
数组了。除了空格以外,还可以使用其他分隔符,例如逗号、冒号等等。如果要使用正则表达式进行拆分,则可以直接传入正则表达式作为参数。例如:
def str = "
Groovy
,is,a,powerful,dynamic,language,for,the,JVM."
def strArr = str.split(/,/)
这样,strArr就是一个包含每个单词的
字符串
数组了,逗号被用作分隔符。另外,如果要限制拆分后的
字符串
数组长度,则可以在split()方法中传入第二个参数,例如:
def str = "
Groovy
is a powerful dynamic language for the JVM."
def strArr = str.split(" ", 3)
这样,strArr就是一个包含前三个单词的
字符串
数组了。
uniapp 解决微信小程序报错getLocation:fail the api need to be declared in the requiredPrivateInfos
三只坚果: