子串查找器效率

时间:2015-10-31 14:12:05

标签: java

我经历了一些在线Java测试之后,说实话,距离编码还有很长的时间,试着再次掌握这种语言。 Anywho,其中一个问题是在不使用“Java API,如indexOf,substring或contains”的情况下创建子字符串查找方法。

所以我想出了这个。

public class test{

int countThis;
String needle = "needle";
String haystack = "haystack";
String le = "le";
String hay = "hay";

char[] charA, charB, charC, charD;

public static void main(String args[]){
  test test = new test();
  test.go();
}

public void go(){
  charA = haystack.toCharArray();
  charB = needle.toCharArray();
  charC = le.toCharArray();
  charD = hay.toCharArray();

  boolean testThis = recursion(charA, needle, 0, countThis);
  boolean testThis1 = recursion(charB, le, 0, countThis);
  boolean testThis2 = recursion(charD, hay, 0, countThis);
  boolean testThis3 = recursion(charB, hay, 0, countThis);
  boolean testThis4 = recursion("liiijdiijy".toCharArray(), "iijy", 0, countThis);
  boolean testThis5 = recursion("liiijdiijy".toCharArray(), "needle", 0, countThis);
  boolean testThis6 = recursion("nyeyeydylye".toCharArray(), "needle", 0, countThis);

  System.out.println(testThis);
  System.out.println(testThis1);
  System.out.println(testThis2);
  System.out.println(testThis3);
  System.out.println(testThis4);
  System.out.println(testThis5);
  System.out.println(testThis6);
}

public boolean recursion(char[] aA, String bB, int i, int count){
  if(i > aA.length-1) return false;
  if(aA[i] == bB.charAt(count))
    count++;
  else
    count = 0;
  return (count == bB.length()) ? true : recursion(aA, bB, i+=1, count);
}
}

请原谅命名,但这有多高效,特别是递归方法?我不确定toCharArray()将如何影响它。除此之外,还有什么方法可以改善它?我认为正则表达式会做得更好,但目前我对它们毫无用处。

1 个答案:

答案 0 :(得分:0)

如何使用这样的正则表达式:

^.*%SUBSTRING%.*$

例如,如果你想检查“你好,世界!”中是否包含“o,W”:

"Hello, World!".matches("^.*" + Pattern.quote("o, W") + ".*$")

这会返回true。

您可以使用以下方法:

private static boolean isSubString(final String string, final String subString) {
    return string.matches("^.*" + Pattern.quote(subString) + ".*$");
}