1

Java新手在这里。

假设给了我一个字符串:

===这个锐是a= stri = ng身===

我将如何使用模式匹配来有效地确定“This 锐is a= stri = ng身”的边缘有多少个“=”符号?

另外,我正在尝试使用 Java 转义序列,例如 \G,但显然它们无法编译。

4

6 回答 6

3

我个人可能不会为此使用正则表达式,但是......这是有效的:

Matcher m = Pattern.compile("^(=+).+[^=](=+)$").matcher("===Som=e=Text====");
m.find();
int count = m.group(1).length() + m.group(2).length();
System.out.println(count);

(请注意,这不是进行错误检查,并假设=两端都有)

编辑以添加:=无论两端是否存在,这都是有效的:

public static int equalsCount(String source)
{
    int count = 0;
    Matcher m = Pattern.compile("^(=+)?.+[^=](=+)?$").matcher(source);
    if (m.find())
    {
        count += m.group(1) == null ? 0 : m.group(1).length();
        count += m.group(2) == null ? 0 : m.group(2).length();
    }

    return count;
}

public static void main(String[] args)
{
    System.out.println(equalsCount("===Some=tex=t="));
    System.out.println(equalsCount("===Some=tex=t"));
    System.out.println(equalsCount("Some=tex=t="));
    System.out.println(equalsCount("Some=tex=t"));
}

另一方面......您可以避免使用正则表达式并执行以下操作:

String myString = "==blah=";
int count = 0;
int i = 0;
while (myString.charAt(i++) == '=')
{
    count++;    
}
i = myString.length() - 1;
while (myString.charAt(i--) == '=')
{
    count++;
}
于 2013-02-15T05:22:34.097 回答
1

如果您想计算边缘出现“=”的次数,请尝试此操作。

int count = str.length() - str.replaceAll("[^=]=[^=]", "").length();
于 2013-02-15T05:04:21.340 回答
0

如果=边缘是平衡的,您可以使用

^(=+).*\1$

Group1 的长度是=边缘的长度

于 2013-02-15T05:42:39.183 回答
0

这可能是一个可能的答案:

public static void main(String[] args) {
    int count = 0;
    String str = "===This is a= stri = ng===";
    Pattern edgeEq = Pattern.compile("=");
    Pattern wordEq = Pattern.compile("[^=]=+[^=]");

    Matcher edgeMatch = edgeEq.matcher(str);
    while (edgeMatch.find()) {
        count++;
    }

    Matcher wordMatch = wordEq.matcher(str);
    while (wordMatch.find()) {
        count--;
    }

    System.out.println(count);
}

这将帮助您找到=字符串边缘的数量。

于 2013-02-15T05:07:13.637 回答
0

=假设开头和结尾总是有相同的数量:

import java.util.regex.*;
Matcher m = Pattern.compile("^=*").matcher(s);
int count = m.find()? m.group(0).length(): 0;
于 2013-02-15T05:13:30.520 回答
0

使用以下代码

    String s1 = "===This 銳is a= stri = ng身===";
    System.out.println("Length : "+s1.length());
    p = Pattern.compile("^=+");

    m = p.matcher(s1);
    int count = 0;
    while (m.find())
    {
        count = m.group().length();
        System.out.println("Group : "+m.group());
    }


    p = Pattern.compile("(=+)$");
    m = p.matcher(s1);
    while (m.find())
    {
        count += m.group().length();
        System.out.println("End Group : "+m.group());
    }

    System.out.println("Total : " + count);
于 2013-02-15T05:40:10.777 回答