如何在字符串中查找多个特定的子字符串

时间:2014-02-27 21:15:58

标签: java regex

嗨,我开始学习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");

任何想法

6 个答案:

答案 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匹配表达式,如果您没有非确定性,我认为很少使用正则表达式。