【问题标题】:How to count the characters in a String that matched a given regex如何计算与给定正则表达式匹配的字符串中的字符
【发布时间】:2017-04-06 23:37:04
【问题描述】:

给定一个包含 0 个或多个与正则表达式匹配的子字符串的任意字符串,我如何计算该字符串中与正则表达式匹配的子字符串的字符数?

例子:

给定一个匹配任何电子邮件地址的正则表达式和字符串“我有两个电子邮件地址:email@gmail.com 和 email@hotmail.com”,这将返回 32 的 int 值(“电子邮件中的字符数@gmail.com”加上“email@hotmail.com”)。

我似乎不够清楚。假设您想对推文中的字符数设置限制,但您希望允许人们在推文中包含他们的电子邮件地址并将其计为零字符。

解决方案的可能方法签名:

public int lengthOfSubStringsMatchingRegex(String input, String regex)

【问题讨论】:

  • 我知道如何获取任意字符串的长度。
  • 不是重复的,因为我不是在询问字符串的出现次数,而是在寻找与输入字符串中的正则表达式匹配的所有字符串的长度。但是这个问题确实有一些与此相关的有用信息。
  • 所有匹配对象都包含一个获取长度的方法。它可能是长度()。

标签: java regex


【解决方案1】:

只需遍历正则表达式的匹配组,然后使用length() 提取字符数。将它们添加到您的柜台,就是这样。

public int lengthOfSubStringsMatchingRegex(String input, String regex)
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);

    int count = 0;
    while (m.find())
        count += m.group().length();

    return count;
}

作为替代方案,但可读性稍差,您可以直接使用偏移量:

count += m.end() - m.start();

start() 返回上一个匹配的开始索引。
end() 返回最后一个匹配字符之后的偏移量。

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2023-01-26
    • 2019-09-20
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多