java正则表达式的优点是什么?
代码的正则表达式
String inputOne = "cat cat cat cattie cat";
String findStr = "cat";
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher(inputOne);
int countOne = 0;
while (m.find()) {
countOne++;
}
System.out.println("Match number " + countOne);
代码的字符串比较
String inpuTwo = "cat cat cat cattie cat";
int lastIndex = 0;
int count = 0;
while (lastIndex != -1) {
lastIndex = inpuTwo.indexOf("cat", lastIndex);
if (lastIndex != -1) {
count++;
lastIndex += findStr.length();
}
}
System.out.println("Match number " + count);
在这两种情况下,都可以在输入字符串“cat cat”中查找子字符串“cat”的出现情况
我的问题是它们之间有什么区别
与字符串比较相比,正则表达式的优势是什么
我应该在应用程序中使用哪一个。正则表达式还是字符串比较
谢谢
# 1 楼答案
在你的例子中,两者都可以。正则表达式一读起来更清晰一些,但并不明显
正则表达式的真正优势来自于当你需要做更复杂的事情时。例如,您将如何编写非正则表达式代码来查找一行中有两位数字的次数?(你也可以,但代码会更长,更难阅读)
正则表达式应该是“\d\d”。在没有正则表达式的情况下编写这篇文章需要很多if语句
# 2 楼答案
两者完全不同,所以答案在很大程度上取决于手头的任务
如果使用不带metacharacters的正则表达式,请改用基于字符串的比较:它们更容易理解,并且不会在不属于(here is a link to an article that explores this point in depth)的地方引入复杂性
正则表达式的威力始于元字符的使用。如果需要定义要捕获的字符串,而不是逐个枚举,那么应该使用正则表达式
# 3 楼答案
当内置功能不足以满足特定场景(比如我们正在研究复杂的事情)时,正则表达式非常有用。但在某些情况下,我们可以使用内置函数或正则表达式。此外,使用正则表达式会缩短代码,提高效率,但我认为会降低代码的可读性
# 4 楼答案
你举的例子非常简单。也许regex真的不是解决这种情况的最好办法。Regex有很多用途。我在ETL工作中经常使用正则表达式,我试图识别一条信息并将其提取出来。我经常会加入lookbehind、捕获组和角色集。使用高级正则表达式比通过编程来做事情容易得多
举个例子,我的一个朋友需要一个正则表达式,它可以从字符串中获取有效的金额,无论它们是否有逗号。。如果只有三个,他们才会这么做。我写的正则表达式是:
(?<=\$)
是一个积极的回顾。这就是说,美元必须在主要比赛之前,但不包括在内\d{1,3}
正在寻找1到3个数字,?
匹配逗号,但使其可选\d{3}
又是3个数字在一个组中,在匹配0个或多个序列后
*
有所有这些\.\d{2}(?!\d)
确保我们有美分,但只值两位数。(?!\d)
是一个负前瞻,意味着在主匹配之后不能有另一个数字。如果有,这将使比赛无效这个正则表达式很难用编程的方式编写,而且需要花费很多时间。使用正则表达式可以节省时间,而且,如果您理解正则表达式,那么一眼就能看出发生了什么事情,这会让您更加容易
此正则表达式与以下内容匹配:
1000000.00美元和100000.00美元
但与以下内容不匹配:
10万美元或1000万美元
然后,可以从匹配的值中去掉逗号,然后将其解析为数字数据类型