Groovy字符串及其常用方法

Groovy语言的字符串处理 本文详细介绍了Groovy语言中的字符串处理,包括字符串的基本定义、常用方法、正则表达式的运用以及高级字符串处理技巧。在实际开发中,字符串处理是非常常见的任务,掌握Groovy的字符串处理能力可以极大提高开发效率。希望通过这篇文章,你能够对Groovy字符串处理有更深入的理解,并能够在以后的编程工作中灵活运用这些知识。 阅读详情

文本文字以字符链的形式表示被称作字符串。脚本语言在字符串处理方面比主流的应用程序开发语言做的更好。Groovy就提供了许多附加的特性。在Groovy中有两种风格的字符串:String(java.lang.String)和GString(groovy.lang.GString)。GString允许有占位符而且允许在运行时对占位符进行 解析和计算。

字符串方法

与java不同,在GString中提供了多种表示字符串的方法,分别是单引号字符串、双引号字符串、三单引号字符串、三双引号字符串、斜杠字符串和$修饰的斜杠字符串。

单引号字符串

单引号字符串是一系列被单引号包围的字符,是普通的java.lang.String。不支持插值。

def str = 'groovy'
assert str.class == java.lang.String

三单引号字符串

三单引号字符串是一列被三个单引号包围的字符,是普通的java.lang.String。不支持插值。

def str = '''groovy'''
assert str.class == java.lang.String

三单引号字符串是多行的。你可以使字符串内容跨越行边界,不需要将字符串分割为一些片段,不需要连接,或换行转义符:

def str = '''
one
two
three'''

//需要注意的是,这个字符串每一次换行都包含了一个换行转义符:

assert str.contains("\n") == true
assert str.size() == 14

//可以通过使用反斜杠换行符剥离该字符

def str = '''\
one\
two\
three'''

assert str.contains("\n") == false
assert str.size() == 11

双引号字符串

双引号字符串是一列被双引号包围的字符,如果没有插值表达式,双引号字符串就是普通的java.lang.String。如果有插值存在则是groovy.lang.GString实例:
任何Groovy表达式可以在所有字符文本进行插值,除了单引号和三单引号字符串。插值是使用占位符上的字符串计算值替换占位符的操作。占位符表达式是被 包围,或前缀为 的表达式。当GString被传递给一个带有一个String参数的方法时,占位符的表达式被计算值,并通过调用表达式的toString()方法以字符串形式表示。
这里是一个占位符引用局部变量的字符串:

def name = 'Groovy'
def greeting = "Hello ${name}"

assert greeting.toString() == 'Hello Groovy'


//而且任何Groovy表达式是合法的,正如我们在示例中使用算数表达式所见一样:
def sum = "The sum of 2 and 3 equals ${2 + 3}"
assert sum.toString() == 'The sum of 2 and 3 equals 5'

//除了${}占位符以外,也可以使用$作为表达式前缀:
def person = [name: 'Guillaume', age: 36]
assert "$person.name is $person.age years old" == 'Guillaume is 36 years old'

//空${}占位符等于null
assert "demo${}" == "demonull"

//如果在GString中你需要转义$或${}占位符,使它们不出现插值,那么你只需要使用反斜杠字符转义美元符号:
assert '${name}' == "\${name}"

当占位符包含一个箭头时:${->}。表达式实际上是一个闭包表达式:

name = "zhangsan"
assert "${->name}" == "zhangsan"

延迟加载

嵌入的闭包表达式仅仅允许携带0或者1个参数。
闭包作为表达式比普通插值表达式有一个很有用的特性:延迟加载。

 def b = 'old'
 def value1 = "${b}"
 def value2 = "${->b}"
 assert value1 == "old"
 assert value2 == "old"

 b = "new"
 assert value1 == "old"    //使用纯插值表达式,结果在GString创建时结合
 assert value2 == "new"    //但使用闭包表达式,GString被强转为Sring时,闭包被调用,并产生包含新数值的更新字符串。

GString和String的hascode不同

虽然插值字符串可以代替普通Java字符串,字符串相同的两者还是有区别:它们的hashCode是不同的。普通Java字符串是不可变的,而一个GString依赖于插入的值,它的String是可变的。即使有相同的字符串结果,GString和String也没有相同的hashCode。

def key = "a"
def m = ["${key}": "letter ${key}"]  //map被一个初始化键值对创建,其键值是GString

assert m["a"] == null   //当我们尝试使用String键值获取值时,我们并没获取对应值,因为String和GString有不同的hashCode

三双引号字符串

三双引号字符串与双引号字符串相同,增加多行,像三单引号字符串一样。

斜杠字符串

除了通常的带引号字符串,groovy提供斜杠字符串,使用/作为分隔符。斜杠字符串对于定义正则表达式和模式是特别有用的,因为不需要转义反斜杠。只有正斜杠需要反斜杠转义。斜杠字符串支持多行,支持插值。

字符串方法

Groovy通过包含附加方法的方法扩展了JDK中的类:center、getAt、leftShift等等。

//String center(Number numberOfChar)  返回一个长度为numberOfChar,其左边和右边均使用空格的填充的新字符串。
def str = "demo"
assert str.center(6) == " demo "
assert str.center(6).size() == 6
assert str.center(5) ==  "demo "    //如果numberOfChar比字符串长度大1.那么在原字符串后添加一个空格。

//String center(Number numberOfChar,String padding)  返回一个长度为numberOfChar,其左边和右边均使用padding的填充的新字符串,与上一个一致:如果第一个参数比字符串长度大1,在元字符串后添加padding
assert str.center(5,"a") == "demoa"
assert str.center(7,"ab") == "ademoab"      //先在元字符串后添加padding的前一个字符,再在原字符串前添加padding的前一个字符。然后在新字符串后添加padding的第二个字符,以此类推。

//int compareToIgnoreCase(String str) 按字典大小比较两个字符串,忽略大小写,返回他们的顺序差值
def str = "a"
assert str.compareToIgnoreCase("a") == 0    //相同返回0
assert str.compareToIgnoreCase("A") == 0    //忽略大小写
assert str.compareToIgnoreCase("c") == -2   //返回差值

//Boolean equalsIgnoreCase(String str) 判断两个字符串是否相等,忽略大小写

//String getAt(int index)   字符串的下标运算符
assert "abcdefg".getAt(2) == "c"
assert "abcdefg"[2] == "c"
assert "abcdefg".getAt(1..2) == "bc"    //String getAt(Range range)
assert "abcdefg"[1..2] == "bc"

//Int indexOf(String str) 返回给定子字符串在当前字符串中首次出现的索引值
assert "abcdefg".indexOf("b") == 1
assert "abcd".indexOf("g") == -1    //如果原字符串中不存在给定子字符串就返回-1

//StringBuffer leftShift(Object value)  重载<< 使两个字符串相加,返回一个新的字符串
assert "ab".leftShift("cd").class ==  java.lang.StringBuffer
assert "ab".leftShift("cd").toString() == "abcd"

//int length() / int size()   返回字符串的长度
assert "abcd".length() == 4
assert "abcd".size() == 4

//String concat(String str) 在字符串后添加str字符串
assert "ab".concat("12") == "ab12"

//Boolean endsWith(String suffix) 测试字符串是否以给定的后缀结尾
assert "demo1".endsWith("1") == true

//String minus(Object value) 删除字符串中value部分
assert "abcd".minus("bc") == "ad"

//String next()  按字典顺序增加给定字符串末尾字符顺序
assert "abcd".next() == "abce"
assert "abc1".next() == "abc2"

//String previous() 按字典顺序增加给定字符串末尾字符顺序
assert "abcd".previous() == "abcc"
assert "abc1".previous() == "abc0"


//String padLeft(Number numberOfCharacters) 与center()用法类似,在元字符串左边填充空格字符
assert "abcd".padLeft(5) == " abcd" 
//String padLeft(Number numberOfCharacters,String padding) 与center()用法类似,在元字符串左边填充padding字符
assert "abcd".padLeft(5,"12") == "1abcd"
//String padRight(Number numberOfCharacters) 与padLeft()用法类似,在元字符串左边填充空格字符
assert "abcd".padRight(5) == "abcd " 
//String padRight(Number numberOfCharacters,String padding) 与padLeft()用法类似,在元字符串左边填充padding字符
assert "abcd".padRight(5,"12") == "abcd1"

//String plus(Object valus) 字符串相加
assert "abcd".plus("123") == "abcd123"

//String reverse() 创建当前字符串的逆序字符串
assert "abcd".reverse() == "dcba"

//String substring(int beginIndex) 返回一个当前字符串的指定索引开始的子字符串
assert "abcd".substring(1) == "bcd"
//String substring(int beginIndex,int endIndex) 返回一个当前字符串的指定索引开始的子字符串
assert "abcd".substring(1,2) == "bc"
//Character toCharacter()
//Double toDouble()
//Float toFloat()
//Integer toInteger()
//Long toLong() 字符串类型转换
//List toList() 将指定的字符串转换成一个由单个字符组成的字符串列表
assert "abcd".toList() == ["a","b","c","d"]

//String toUpperCase() 将当前字符串对象的所有字符转换为大写
assert "abcd".toUpperCase() == "ABCD"
//String toLowerCase() 将当前字符串对象的所有字符转换为小写 
assert "ABCD".toUpperCase() == "abcd"
//List tokenize()  使用空格作为字符串的分隔符
//List tokenize(String token) 使用指定的token参数作为字符串的分隔符
//String[] split(String regex) 使用与给定的正则表达式相匹配的子字符串将字符串分隔为多个字符串
// Boolean matches(String regex) 测试字符串是否匹配给定子字符串

tokenize() vs split()

1.split()返回string[], tokenize()返回list
2.tokenize()忽略空字符串

String testString = 'hello brother'
assert testString.split() instanceof String[]
assert ['hello','brother']==testString.split() //split with no arguments
assert['he','','o brother']==testString.split('l')

assert testString.tokenize() instanceof List
assert ['hello','brother']==testString.tokenize() //tokenize with no arguments
assert ['he','o brother']==testString.tokenize('l')

3.tokenize()使用字符串内的所有字符

String  testString1='hello world'
assert ['hel',' world']==testString1.split('lo')
assert ['he',' w','r','d']==testString1.tokenize('lo')

4.split()可以使用正则表达式

String testString2='hello world 123 herload'
assert['hello world ',' herload']==testString2.split(/\d{3}/)

matches()

对正则表达式感兴趣的读者可以看一下这篇文章正则表达式30分钟入门教程。

正则表达式的简单规则

\b :单词的开始或者结尾
\w :匹配字母或者数字或者下划线或汉字
\d :匹配数字
{n}:表示匹配前一个规则,重复n次
. :匹配除了换行符以外的任意字符
* :*前边的内容可以连续重复使用任意次以使整个表达式得到匹配
+ :与*相似,匹配一次或更多次数。
\s :匹配任意的空白符
^ :匹配字符串的开始
:匹配字符串的结束和 的意义就变成了匹配行的开始处和结束处。

assert 'hi'.matches('hi')
assert '111'.matches('\\d{3}')       //'\d':表示匹配一位数字
assert '11as11'.matches('\\d{2}.*\\d{2}')
4、Groovy编程基础:字符串、方法、闭包与集合的深入解析 本文深入解析了Groovy编程的基础知识,包括斜杠字符串的使用、方法与闭包的定义及调用、各种集合类型的操作以及正则表达式的基本用法。通过代码示例详细展示了Groovy语言在字符串处理、代码复用、数据结构操作等方面的优势,帮助读者快速掌握Groovy编程的核心技能。 阅读详情

相关推荐

【hadoop编译报错】(yarn install) on project hadoop-yarn-applications-catalog-webapp Failed to run task

ambari+bigtop自定义组件集成

TTBIGDATA的博客 1803

groovy高级语言语法之字符串

常量文本字符(text literals)代表了字符链形式的一种东西,叫字符串。groovy可以直接实例化java.lang.String对象。GString在其他语言里也叫插值字符串。 单引号字符串就是纯的Java字符串,不支持插值操作。所有的groovy字符串都可以使用'+'连接操作 三引号字符串 纯Java字符串,不支持插值。三引号字符串可以跨行出现, 转义字符 Escape sequence Character \bba

fuxisong502的博客 2105

用Python玩转Carla-Apollo联合仿真:手把手教你实现自动驾驶测试

本文详细介绍了如何使用Python实现Carla-Apollo联合仿真,从环境搭建到自动驾驶算法测试的全流程。通过Carla提供的高逼真仿真环境和Apollo的自动驾驶算法栈,开发者可以高效验证感知、规划和控制模块。文章包含环境配置、Python API操作、桥接实现及实战测试,为自动驾驶开发提供完整解决方案。

wasm7browser的博客 266

Groovy快速入门-7-String

这篇来学习String, 在Groovy中String是一个数据类型,在Java中String是一个对象。这篇很重要,实际开发中,百分之50以上的代码都和字符串处理有关。可以这么说,你字符串操作越熟悉,你实现业务代码就更快,特别是在CI CD pipeline代码中。 1.字符串拼接 这个代码中使用场景非常多,程序员最喜欢的输出语句就要用到这个。在Groovy中实现字符串拼接有好几个方法...

Anthony_tester的博客 1216

基于R语言的现代贝叶斯统计学方法(贝叶斯参数估计、贝叶斯回归、贝叶斯计算)实践

贝叶斯统计学是一门基本思想与传统基于频率思想的统计学完全不同的统计学方法;它以其灵活性和先进性在现代的统计学中占据着重要的地位。贝叶斯统计学是开展科学研究不可缺少的重要手段,但是,因为其思想、技术和方法都与传统统计学有着较大区别;且其计算中涉及马尔科夫、蒙特卡罗和吉布斯采样等现代计算方法,对使用者经验和能力构成了很大的挑战。

AAIshangyanxiu的博客 679

Python实战:5分钟搞定N-CMAPSS航空发动机数据集解析(附完整代码)

本文提供了一份针对N-CMAPSS航空发动机数据集的快速解析实战指南。通过Python的h5py和Pandas库,详细演示了如何高效读取HDF5格式文件、理解数据结构、提取关键特征(如传感器数据与剩余使用寿命RUL),并整合为可用于预测性维护分析的DataFrame,帮助研究者和工程师快速上手这一重要的工业时序数据集。

weixin_29083373的博客 278

08-Groovy-数据类型-String介绍

Groovy-数据类型-String介绍

小白的博客 2245

高德地图-获取定位-失败原因-浏览器定位异常场景

提示:也能实现,但是需要https协议,而且请求时间很长,要么你用梯子,还是不太合适.

shi15926lei的博客 4204

Java使用Groovy脚本$符,转义问题

java读取Groovy脚本出错:原因:Groovy中$运用与java不同,groovy运用$需要转义 解决方法: 改为:

leeadmin的博客 5756

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3390

Docker/Hyper-V/Wsl2等虚拟化组件一键切换工具 (附源码, Docker Desktop开发模式与三角洲游戏模式一键切换工具)

开启 Docker、Hyper-V 或 WSL2 后游戏无法启动?🎮💻 本文教你用一键批处理工具⚡快速切换“开发/游戏模式”,开发娱乐两不误!🔄✨

XiaoqiangClub的博客 697

Groovy(三)groovy字符串的常用方法

一 学习思路 备注: 这个是'重点',DSL经常要'处理字符串' 1)演示'常用的' -->注意细节-->'入参'、'返回值' 2)不常用的'罗列'出来,方便查询 3)对比'其它语言',差异性学习 4)字符串关于'正则'的后续讲解 二 各个击破 ① 统计 备注: python的count()方法与groovy的'有差异' python: 下面的结果是'2' ② 字符串拼接 1) print 'abc' + 'def' //字符串拼接 2) str.con..

wzj_110的博客 1万+

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

shufawangzhang的博客 3984

Groovy将字符串类型转换为自定义类型的方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34269583的博客 1540

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Groovy 反射字符串常量方法

Keywords: Groovy, Reflection, 反射 The Reflection of Groovy String constant style method. Groovy支持以下的方法定义: class A { def "I am a method"() { } } Groovy是继承Java的机制的,而Java显然是不支持这种函数定义命...

weixin_30625691的博客 233

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

groovy字符串详解

在单引号字符串中,字符串会被原样输出,不进行变量替换或转义字符处理。

weixin_42332342的博客 3676

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )

一、字符串切割、 1、使用 Java 语法切割字符串、 2、使用 Groovy 语法切割字符串直接为变量赋值、 3、数组赋值给变量 变量个数小于等于数组长度、 二、完整代码示例、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 8770

Groovy -> Groovy数据类型和字符串

Groovy数据类型和字符串

sunshine_guo的博客 564

Groovy 学习之八:字符串

通过在引号中包含字符串文本,在Groovy 中构造一个字符串文字。 Groovy 提供了多种表示String 字面量的方法。 Groovy 中的字符串可以用单引号('),双引号(“)或三引号(”“”)括起来。此外,由三重引号括起来的Groovy字符串可以跨越多行。 以下是Groovy中字符串使用的示例: class Example { static void main(String...

qq_22003641的博客 2064

groovy核心语法学习---变量、字符串、字符串方法、逻辑控制、闭包

在上一次对于groovy环境进行了搭建并写了一个Helloworld级别的例子感受了一下它的魅力,接下来则来具体学习一下它的语法,要想学得扎实枯燥的语法的坎是必须得过的。 变量: 变量的类型: 基本类型:这个跟java差不多,回忆一下: 对象类型:也跟Java差不多。 ...

webor2006的博客 787

【Gradle】Groovy的语法详解(1/2)

Gradle之所以在项目构建的过程中很强大,其中很大一部分原因就是在于Groovy。Grooovy是Java平台上设计的一种强大的、可选类型和动态的语言。Groovy可以无缝地集成任何Java程序,并立即让你的应用程序拥有强大的特性,包括脚本功能、DSL、运行时和编译时元编程和函数式编程。 也就是说,相比较于通过Maven等来进行项目构建,它可以更灵活多变地实现更加复杂的功能。 本文实例源码git...

Yngz_Miao的博客 9260

Groovy02_字符串与循环

1. 字符串 字符串 单引号与双引号的区别 (使用闭包时候惰性求值) 多行字符串 对字符串类型的一些扩展 (execute、find) class lsn_2_0 { static String test(){ // 这是java的写法 //return "111" // 但是在Groovy当中,无论是我们的函数还是我们...

ZekingLee 727

在Groovy中使用字符串

Groovy支持两种类型字符串:一般的Java字符串,它是java.lang.String的实例;和GStrings,它是groovy.lang.GString的实例,并且允许文本中包含占位符。GStrings并不是String的子类,因为String类是最终类(final class)不能被继承。然而,GString与一般的字符串一样,因为Groovy能将GStrings转型为Java stri

L4606848的专栏 9439

2. groovy基本语法

2. groovy基本语法一. 前篇二. 开始类、方法、变量 一. 前篇 我们在上一篇中已经介绍了groovy是什么。本章将介绍groovy的基本语法。 但是,我觉得groovy不会是各位的第一门语言,所以,我将跳过通用的一些语法,比如运算。 我们将重点介绍groovy特有的和常用的语法,包括但不限于类、方法、变量定义,流,I/0,集合,Map等。 二. 开始 类、方法、变量 ...

hongqing.chu's blog 240

Groovy基础

Groovy是基于JVM虚拟机的一种动态语言,它的语法和Java非常相似,由Java入门Groovy,基本上没有任何障碍。Groovy完全兼容Java,又在此基础上增加了很多动态类型和灵活的特性,比如支持闭包,支持DSL,可以说它是一门非常灵活的动态脚本语言。Groovy的特性虽然不多,但也有一些,我们不可能在这里都讲完,这也不是这本书的初衷,在这里我挑一些和Gradle有关的知识讲,让大家很快的入

飞雪无情的博客 1万+

【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )

一、基础示例、 二、根据字符串动态获取 MetaClass 中的方法、 二、使用 evaluate 执行字符串形式的 Groovy 脚本、 二、完整代码示例、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1508
上一篇: Groovy集合(map)
下一篇: MongoDB-3.2.0 授权登陆
zhaodongxx
博客等级 码龄12年 116粉丝 26原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值