Java新手在这里。
假设给了我一个字符串:
===这个锐是a= stri = ng身===
我将如何使用模式匹配来有效地确定“This 锐is a= stri = ng身”的边缘有多少个“=”符号?
另外,我正在尝试使用 Java 转义序列,例如 \G,但显然它们无法编译。
Java新手在这里。
假设给了我一个字符串:
===这个锐是a= stri = ng身===
我将如何使用模式匹配来有效地确定“This 锐is a= stri = ng身”的边缘有多少个“=”符号?
另外,我正在尝试使用 Java 转义序列,例如 \G,但显然它们无法编译。
我个人可能不会为此使用正则表达式,但是......这是有效的:
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++;
}
如果您想计算边缘出现“=”的次数,请尝试此操作。
int count = str.length() - str.replaceAll("[^=]=[^=]", "").length();
如果=
边缘是平衡的,您可以使用
^(=+).*\1$
Group1 的长度是=
边缘的长度
这可能是一个可能的答案:
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);
}
这将帮助您找到=
字符串边缘的数量。
=
假设开头和结尾总是有相同的数量:
import java.util.regex.*;
Matcher m = Pattern.compile("^=*").matcher(s);
int count = m.find()? m.group(0).length(): 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);