嗨,我开始学习java,但我有正则表达式的问题,我有一个像这样的字符串
str =“int f(int a,int b)”
我想找到有多少“int”发生
我在oracle的doc中读到了,我发现我们有一个名为X {n}的正则表达式告诉我们,例如“int”是否恰好匹配n次 我写这个代码,但它给了我错误的
String temp = "int f ( int a , int b )";
Pattern pattern = Pattern.compile("\\bint{3}\\b");
Matcher matcher = pattern.matcher(temp);
if(matcher.find()
system.out.print("found");
任何想法
答案 0 :(得分:4)
使用
int numberOfOccurences = str.split("int", -1).length - 1;
String类的split()方法将字符串拆分为围绕子字符串出现的数组(在本例中为“int”)。
答案 1 :(得分:0)
您可以在find()
上反复拨打Matcher
以查找该模式的重复副本。因此,搜索/\bint\b/
,然后计算find()
返回true
的次数。
答案 2 :(得分:0)
int occurrences = 0;
int index = 0;
while (index < str.length() && (index = str.indexOf("int", index)) >= 0) {
occurrences++;
index += 3; //'length' of (characters in) 'int'
}
Occurrences
保留您所追求的数字(即str
中可以找到'int'的次数。)
答案 3 :(得分:0)
您误解了X{N}
:它匹配上一个表达式的后续匹配项,因此a{3}
将匹配aaa
但不匹配ababa
。
您不应该使用正则表达式来执行此任务。它们对计算事件的效率很低。
int countOccurrences(String str, String what) {
int index, n;
index = n = 0;
// Increase n as long as there are occurrences after the
// last found index
while(index < str.length() && (index = str.indexOf(what, index)) != -1) {
n++;
index += what.length();
}
return n;
}
答案 4 :(得分:0)
split()是我的第一个猜测,但有一些特殊情况。它最终有点凌乱......
int count = (" " + str + " ").split(" int ").length-1;
答案 5 :(得分:-1)
为什么要使用复杂的正则表达式?您可以连续三次检查字符串String#indexOf(int, int)
- 正则表达式可以使用NFA匹配表达式,如果您没有非确定性,我认为很少使用正则表达式。