代码的正则表达式
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 cattie cat”中找到子串“cat”的出现。
我的问题是它们之间的区别是什么?
正则表达式优于字符串比较有什么优势。
我应该将哪一个用于申请。正则表达式或字符串比较?。
感谢。
答案 0 :(得分:13)
两者完全不同,所以答案很大程度上取决于手头的任务。
如果使用不带metacharacters的正则表达式,请使用基于字符串的比较:它们更容易理解,并且不会引入不属于它的复杂性(here is a link to an article that explores this point in depth)。
正则表达式的强大功能始于使用元字符。如果您需要定义要捕获的字符串而不是逐个枚举它们,则应使用正则表达式。
答案 1 :(得分:4)
你提供的例子是令人难以置信的基本。也许正则表达式确实不是那种情况的最佳答案。正则表达式有很多用途。我在ETL工作中经常使用正则表达式,我正在尝试识别一条信息并将其拉出来。我经常混合使用lookbehinds,捕获组和字符集。使用高级正则表达式比以编程方式处理更容易。
一个例子是我的一个朋友需要一个正则表达式,无论他们是否有逗号,都能从字符串中获得有效金额......如果他们只有三个人那么。我为此写的正则表达式是:
(小于?= \ $)。\ d {1,3}(?,\ d {3})* \ d {2}(?!\ d)
(?<=\$)
是一个积极的看法。这就是说$必须在主要比赛之前,但不包括在内。
\d{1,3}
正在寻找1到3个数字。
,?
与逗号匹配,但会将其设为可选。
\d{3}
又是3个数字。
将*
组中的所有内容与该序列中的0个或更多个匹配。
\.\d{2}(?!\d)
确保我们有美分,但只有2位数值。 (?!\d)
是一个负向前瞻,意味着主赛后不能有另一个数字。如果有,则使比赛无效。
这个正则表达式会以编程方式更难写,并且需要花费很多时间。使用正则表达式可以节省时间,如果您了解正则表达式,则可以更加轻松地查看正在进行的操作。
此正则表达式匹配以下内容:
$ 1,000,000.00和$ 100000.00
但不匹配:
$ 1,00,000.00或$ 1000.000
然后可以从匹配的值中删除逗号,然后将其解析为数字数据类型。
答案 2 :(得分:3)
在你的例子中,两者都没问题。正则表达式可以更清楚地阅读,但不是很明显。
正则表达式的真正优势来自于你需要做一些更复杂的事情。例如,如何编写非正则表达式代码以查找连续两位数的次数? (你可以,但代码更长,更难阅读)
正则表达式为“\ d \ d”。在没有正则表达式的情况下编写它将需要大量的if语句。
答案 3 :(得分:1)
当内置功能不足以应对特定场景时,正则表达式非常有用,例如我们正在研究复杂的事情。但有些情况下我们可以使用内置函数或正则表达式。使用正则表达式也会缩短代码并有效但会降低我认为的代码的可读性。