有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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”的出现情况

我的问题是它们之间有什么区别

与字符串比较相比,正则表达式的优势是什么

我应该在应用程序中使用哪一个。正则表达式还是字符串比较

谢谢


共 (4) 个答案

  1. # 1 楼答案

    在你的例子中,两者都可以。正则表达式一读起来更清晰一些,但并不明显

    正则表达式的真正优势来自于当你需要做更复杂的事情时。例如,您将如何编写非正则表达式代码来查找一行中有两位数字的次数?(你也可以,但代码会更长,更难阅读)

    正则表达式应该是“\d\d”。在没有正则表达式的情况下编写这篇文章需要很多if语句

  2. # 2 楼答案

    两者完全不同,所以答案在很大程度上取决于手头的任务

    如果使用不带metacharacters的正则表达式,请改用基于字符串的比较:它们更容易理解,并且不会在不属于(here is a link to an article that explores this point in depth)的地方引入复杂性

    正则表达式的威力始于元字符的使用。如果需要定义要捕获的字符串,而不是逐个枚举,那么应该使用正则表达式

  3. # 3 楼答案

    当内置功能不足以满足特定场景(比如我们正在研究复杂的事情)时,正则表达式非常有用。但在某些情况下,我们可以使用内置函数或正则表达式。此外,使用正则表达式会缩短代码,提高效率,但我认为会降低代码的可读性

  4. # 4 楼答案

    你举的例子非常简单。也许regex真的不是解决这种情况的最好办法。Regex有很多用途。我在ETL工作中经常使用正则表达式,我试图识别一条信息并将其提取出来。我经常会加入lookbehind、捕获组和角色集。使用高级正则表达式比通过编程来做事情容易得多

    举个例子,我的一个朋友需要一个正则表达式,它可以从字符串中获取有效的金额,无论它们是否有逗号。。如果只有三个,他们才会这么做。我写的正则表达式是:

    (?<=\$)\d{1,3}(,?\d{3})*.\d{2}(?!\d)

    (?<=\$)是一个积极的回顾。这就是说,美元必须在主要比赛之前,但不包括在内

    \d{1,3}正在寻找1到3个数字

    ,?匹配逗号,但使其可选

    \d{3}又是3个数字

    在一个组中,在匹配0个或多个序列后*有所有这些

    \.\d{2}(?!\d)确保我们有美分,但只值两位数。(?!\d)是一个负前瞻,意味着在主匹配之后不能有另一个数字。如果有,这将使比赛无效

    这个正则表达式很难用编程的方式编写,而且需要花费很多时间。使用正则表达式可以节省时间,而且,如果您理解正则表达式,那么一眼就能看出发生了什么事情,这会让您更加容易

    此正则表达式与以下内容匹配:

    1000000.00美元和100000.00美元

    但与以下内容不匹配:

    10万美元或1000万美元

    然后,可以从匹配的值中去掉逗号,然后将其解析为数字数据类型