我一直在尝试编写子字符串搜索方法,该方法可以获取字符串中显示的模式数量。我的问题必须处理我所拥有的多个for循环和if语句的逻辑。如果输入字符串是AABABAA并且输入模式是AA,它应该迭代并返回2的数量。任何建议来帮助我完成我的代码?
public int getCount(String pattern){
for (int i=0; i< this.strand.length()-pattern.length(); i++){
for (int k=0; k<pattern.length(); k++){
if (this.strand.charAt(i) == pattern.charAt(k)){
for(int j=1; j<pattern.length()-1; j++){
if (this.strand.charAt(j+i) == pattern.charAt(j)){
if(j==pattern.length()){
Count++;
}
}
else{
break;
}
}
}
else if (this.strand.charAt(i)!=pattern.charAt(k)){
break;
}
}
}
return Count;
}
答案 0 :(得分:1)
这样的东西?如果您不想使用.subString(int, int)
public static int findSubString(String input, String pattern) {
int output = 0;
for (int i = 0; i <= input.length() - pattern.length(); i++) {
boolean ok = true;
for (int k = 0; k < pattern.length(); k++) {
if(input.charAt(i + k) != pattern.charAt(k)) {
ok = false;
break;
}
}
if(ok) output++;
}
return output;
}
我认为如果pattern
的长度大于input
的长度,这也会有效。我使用break;
因为您已经发现不匹配,所以进行任何进一步检查都是浪费时间。
答案 1 :(得分:0)
我知道这完全忽略了循环的逻辑,但如果没有什么可以阻止它,为什么不使用正则表达式呢?
这样的事情有效。请务必导入java.util.regex.*
调用getCount("AABABAA","AA")
会返回2
public int getCount(String input, String expression) {
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find())
count++;
return count;
}
请注意,根据您的表达式,您可能需要将其转义。从这个问题开始,如果是这样的话:How to escape text for regular expression in Java
答案 2 :(得分:0)
这会让您保持一个循环,以及完整性检查pattern
和this.strand
。
public int getCount(String pattern) {
int count = 0;
// Sanity check; make sure neither pattern nor strand are null
if(pattern == null
|| this.strand == null
|| pattern.length() > this.strand.length()) {
return count;
}
String _substring;
for(int i = 0; i <= this.strand.length() - pattern.length(); i++) {
_substring = this.strand.substring(i, i + pattern.length());
if(_substring.equals(pattern)) {
count++;
}
}
return count;
}
答案 3 :(得分:0)
import java.util.Scanner;
public class StringMatch1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String T, P, sub;
System.out.print("Enter a text string T: ");
T = in.nextLine();
System.out.print("Enter a pattern string P: ");
P = in.next();
for (int i = 0; i <= T.length() - P.length(); i++ ){
sub = T.substring(i, i + P.length()); // try to match this
if (P.equals(sub)){
System.out.println("Found pattern at position " + i);
}
}
}
}