您的位置 首页 java

Java中的新的正则表达式功能9

java 9正则表达式模块

Java 9中的JDK分为模块。人们可以合理地期望有一个新的模块用于正则表达式处理包和类。其实没有。该模块 java.base 是所有其他模块默认依赖的默认模块,因此导出的软件包的类始终在Java应用程序中可用。正则表达式包 java.util.regex 由此模块导出。这使得开发变得更简单:如果我们要在代码中使用正则表达式,则不需要明确地“要求”一个模块。似乎正则表达式对于Java包含在基本模块中是至关重要的。

正则表达式类

该包 java.util.regex 包含类

  • MatchResult

  • Matcher

  • Pattern

  • PatternSyntaxException

改变A pi 的唯一类是 Matcher

班级比赛中的变化

该课程 Matcher 增加了五种新方法。其中四个是已经存在的方法的超载版本。这些是:

  • appendReplacement

  • appendTail

  • replaceAll

  • replaceFirst

  • results

前四个存在于早期版本中,只有参数类型的改变(毕竟是什么重载意味着)。

appendReplacement /尾

在的情况下, appendReplacement appendTail 唯一的区别是,该参数也可以是一个 StringBuilder ,而不仅仅是 StringBuffer 。考虑到 StringBuilder 在Java 1.5 中引入的东西,像13年前,没有人应该说这是一个不小心的行为。

它虽然多么有趣的API JDK的当前网络版文档的行为 appendReplacement 进行 StringBuilder 论证。较旧的 StringBuffer 有争议的方法明确表示替换 字符串 可能包含将被相应组替换的命名引用。该 StringBuilder argumented版本错过这个。该文档似乎是复制/粘贴,然后编辑。该文本将“缓冲区”替换为“构建器”并且相似,并且将删除指定的引用要素的文本。

我尝试使用Java 9 build160的功能,这两个方法版本的结果是一样的。这不应该是一个惊喜,因为这两个方法的源代码是相同的,JDK中的一个简单的复制/粘贴,除了参数类型。

似乎可以使用

@Test 

注释行或每一行上面的行。然而,文档仅涉及编号的引用。

的replaceAll /第一

这也是一个“旧”方法,用一些新的字符串替换匹配的组。旧版本和新版本之间的唯一区别是如何提供替换字符串。在旧版本中,字符串是 String 在调用该方法之前计算的。在新版本中,字符串作为a Function<MatchResult,String> 。为每个匹配结果调用此函数,并且可以即时计算替换字符串。

知道这个课程 Function 是在3年前在Java 8中引入的,它在正则表达式中的新用法可能是一个小小的破折号。或者也许…可能我们应该看到这是十年后的一个提示,当课程 Fuction 将是13岁,我们还会有Java 9?

让我们深入了解这两种方法。(实际上只是 replaceAll 因为 replaceFirst 它是相同的,除了它只替换了第一个匹配的组。)我尝试创建一些不是绝对复杂的例子,当这样的使用可能是有价值的。

第一个示例来自JDK文档:

@Test 

它不是太复杂,显示功能。使用lambda表达式是绝对足够的。我不能想象一个更简单的方法来大写常量字符串文字“狗”。也许只写“DOG”。好吧,我只是在开玩笑。但真的这个例子太简单了。对于更复杂的文档,文档可能会使阅读器与文档化方法的功能分散。真的:不要指望在JavaDoc中不太复杂的例子。它描述了如何使用API,而不是为什么API被创建为一种设计的方式。

但是现在我们来看一些比较复杂的例子。我们要在字符串中替换 # 数字1,2,3等的字符。字符串包含编号的项目,如果我们在字符串中插入一个新的字符串,我们不想手动重新编号。有时我们分组两个项目,在这种情况下我们写 ## ,然后我们只想跳过下一个序列号 # 。由于我们有一个单元测试,代码比我可以把它描述得更好:

@Test 

传递的lambda表达式 replaceAll 获取 计数器 并计算下一个值。如果我们使用了一个, # 那么如果我们使用两个,那么它会增加1,那么它将两个添加到计数器等等。因为lambda表达式不能改变周围环境中变量的值(该变量必须是有效的最终),所以计数器不能是变量 int Integer 变量。我们需要一个拥有int值的对象,并且可以被更改。 AtomicInteger 即使我们不使用它的原子特征也是如此。

下一个例子更进一步,并进行一些数学计算。它将字符串中的任何浮点格式的数字替换为其正弦值。这样就可以纠正我们的判决,因为罪(pi)甚至不接近于pi,这在这里是不能精确表达的。它接近于零:

@Test 

我们还将通过这个计算方式来演示我们列表中最后一个方法的演示,这是一个全新的 Matcher 类。

流结果()

新方法 results() 返回匹配结果的流。更准确地说它返回 Stream MatchResult 对象。在下面的示例中,我们使用它从字符串中收集任何浮点格式的数字,并打印它们的正弦值逗号分隔:

@Test public void resultsTest(){ 

概要

在Java 9 JDK中引入的新的正则表达式方法与已经可用的基本不同。它们是整齐和方便的,在某些情况下,他们可以减轻编程。在早期版本中没有什么可以介绍的。这只是Java对JDK进行缓慢而深思熟虑的改变的方式。毕竟这就是为什么我们喜欢Java,不是吗?

从IDE的整个代码复制粘贴可以从以下要点找到并下载

转:

大家可以点击加入群:606187239【JAVA大牛学习交流】

里面有Java高级大牛直播讲解知识点 走的就是高端路线

(如果你想跳槽换工作 但是技术又不够 或者工作上遇到了

瓶颈 我这里有一个JAVA的免费直播课程 讲的是高端的知识点

基础不好的误入哟 只要你有1-5年的开发经验

可以加群找我要课堂链接 注意:是免费的 没有开发经验误入哦)

1、具有1-5工作经验的,面对目前流行的技术不知从何下手,

需要突破技术瓶颈的可以加。2、在公司待久了,过得很安逸,

但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,

常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。

但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5. 群号:高级架构群 606187239备注好信息!

6.阿里Java高级大牛直播讲解知识点,分享知识,

多年工作经验的梳理和总结,带着大家全面、

科学地建立自己的技术体系和技术认知!

文章来源:智云一二三科技

文章标题:Java中的新的正则表达式功能9

文章地址:https://www.zhihuclub.com/185637.shtml

关于作者: 智云科技

热门文章

网站地图