更新时间:2019-12-20 16:14:57 来源:极悦 浏览2398次
Java 9中的JDK分为模块。人们可以合理地期望有一个新的模块用于正则表达式处理包和类。其实没有。该模块java.base是所有其他模块默认依赖的默认模块,因此导出的软件包的类始终在Java应用程序中可用。正则表达式包java.util.regex由此模块导出。这使得开发变得更简单:如果我们要在代码中使用正则表达式,则不需要明确地“要求”一个模块。似乎正则表达式对于Java包含在基本模块中是至关重要的。
正则表达式类
该包java.util.regex包含类
MatchResult
Matcher
Pattern 和
PatternSyntaxException
改变API的唯一类是Matcher。
班级比赛中的变化
该课程Matcher增加了五种新方法。其中四个是已经存在的方法的超载版本。这些是:
appendReplacement
appendTail
replaceAll
replaceFirst
results
前四个存在于早期版本中,只有参数类型的改变(毕竟是什么重载意味着)。
appendReplacement /尾
在的情况下,appendReplacement和appendTail唯一的区别是,该参数也可以是一个StringBuilder,而不仅仅是StringBuffer。考虑到StringBuilder在Java 1.5 中引入的东西,像13年前,没有人应该说这是一个不小心的行为。
它虽然多么有趣的API JDK的当前网络版文档的行为appendReplacement进行StringBuilder论证。较旧的StringBuffer有争议的方法明确表示替换字符串可能包含将被相应组替换的命名引用。该StringBuilderargumented版本错过这个。该文档似乎是复制/粘贴,然后编辑。该文本将“缓冲区”替换为“构建器”并且相似,并且将删除指定的引用要素的文本。
我尝试使用Java 9 build160的功能,这两个方法版本的结果是一样的。这不应该是一个惊喜,因为这两个方法的源代码是相同的,JDK中的一个简单的复制/粘贴,除了参数类型。
似乎可以使用
@Test
注释行或每一行上面的行。然而,文档仅涉及编号的引用。
的replaceAll /第一
这也是一个“旧”方法,用一些新的字符串替换匹配的组。旧版本和新版本之间的唯一区别是如何提供替换字符串。在旧版本中,字符串是String在调用该方法之前计算的。在新版本中,字符串作为a Function。为每个匹配结果调用此函数,并且可以即时计算替换字符串。
知道这个课程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新的正则表达式功能”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
相关文章
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习