不使用字符串函数在字符串中出现子字符串

时间:2013-10-19 22:40:40

标签: java string

我想知道如何在不使用任何内置JAVA字符串函数的情况下计算字符串中特定子字符串的出现次数。例如:

InputString = "knowbutuknow"
subString = "know"

程序应该将结果返回为2。

编辑:重新提出我的问题。这是我遇到的那些面试问题之一。

编辑:这里可以使用像charAt和length这样的基本字符串函数。

1 个答案:

答案 0 :(得分:0)

假设您已经知道要搜索的关键字:

  • 从char" 0"开始输入字符串
  • 迭代直到"长度 - keyWordLength" (长度为4的关键字不能与最后3个字符匹配)
  • 内部:从0到keyWord.length -1迭代并始终​​比较:
  • 在输入字符串的内环的外环PLUS位置处的字符,其中字符为"内环"关键字的位置。
  • 如果找到匹配项,继续使用内部循环,如果不匹配,则通过简单的“#34; break"内环。
  • 如果您有匹配项并完全处理了内部循环,那么您将匹配该关键字。

像这样的东西。我假设允许String.length。另外,你需要创建自己的strlen函数。 (这可以通过forach循环和简单计数来实现" up")

这是未经测试的,可能无法开箱即用,但应该给你一个简短的想法。

String inputString = "knowbutuknow";
String subString = "know";

int matches = 0;
for (int outer = 0; outer <= inputString.length() - subString.length(); outer++){
  for (int inner = 0; inner < subString.length(); inner++){
    if (inputString.charAt(outer + inner) == subString.charAt(inner)){
      // letter matched, proceed.
      if (inner == subString.length()-1){
        //last letter matched, so a word match at position "outer"
        matches++;
        //proceed with outer. Room for improvement: Skip next n chars beeing
        // part of the match already.
        break;
      } 
    }else{
      //no match for "outer" position, proceed to next char.
      break;
    }
  }
} 

编辑:对不起,混在一些php :)修复它。