我经历了一些在线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()
将如何影响它。除此之外,还有什么方法可以改善它?我认为正则表达式会做得更好,但目前我对它们毫无用处。
答案 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) + ".*$");
}