Java 递归计数字母

Java 递归计数字母,java,Java,我正在尝试创建一个程序,该程序将计算出现在两个相同子字符串之间的字符串中的字符数, 例如: strDist(“cccatcowcatxx”、“cat”)→应该返回9,因为两个cat实例(包括实例本身)之间的字母数是9 public int strDist(String str, String sub) { if (str.length() >= sub.length()){//accomodate for the last length of string hat can be e

我正在尝试创建一个程序,该程序将计算出现在两个相同子字符串之间的字符串中的字符数,
例如:

strDist(“cccatcowcatxx”、“cat”)→
应该
返回9
,因为两个cat实例(包括实例本身)之间的字母数是
9

public int strDist(String str, String sub) {
    if (str.length() >= sub.length()){//accomodate for the last length of string hat can be equal to sub
      if ((str.substring(0,sub.length())).equals(sub)){
        return sub.length() + strDist(str.substring(sub.length(), str.length()), sub); 
      }
      else if ((str.substring(str.length() - 1, str.length()).equals(sub.substring(sub.length() - 1,sub.length())))){
        return sub.length();//return diff here
      }
      else {
          return (strDist(str.substring(1,str.length()), sub)); 
      }
    }
    return 0;   
}
正确的方法是:

public int strDist(String str, String sub) {
    if (str.length() >= sub.length()){
      if ((str.substring(0,sub.length())).equals(sub)){
          if ((str.substring(str.length() - sub.length())).equals(sub)){
              return str.length();
          }
          else{
              return strDist(str.substring(0, str.length()-1), sub);
          }
      }
      else {
          return (strDist(str.substring(1), sub)); 
      }
    }
    return 0;   
}

我假设-如果我错了请纠正我-如果
sub
没有发生,结果应该是0;如果发生一次,结果应为
sub
;如果多次出现,结果可能是以
sub
开始和结束的最长子字符串的长度

因此,您的外部
if
语句是正确的:只有当字符串足够长时,才能搜索
。接下来检查字符串是否以
sub
开头,这也是一个好主意。但是不要从一开始就删掉
sub
。因为如果从
catcowcat
中切掉
cat
,递归调用
strist(“cowcat”、“cat”)
将不会返回6(至少不应该返回)。相反,我建议您查看字符串是否也以
sub
结尾。如果是,只返回整个字符串的长度。如果没有,则从末尾切掉一个字符并递归调用

一些提示:您可以使用
str.startsWith(sub)
来代替
str.substring(0,sub.length()).equals(sub)
。您可以只编写
str.substring(1)
,而不是
str.substring(1)
,如果您愿意,也可以这样做

编辑:很高兴你成功了,老兄。我正在从注释中格式化您的固定/工作代码,并将其粘贴到此处,以防其他人阅读:

public int strDist(String str, String sub) {
    if (str.length() >= sub.length()) {
        if ((str.substring(0, sub.length())).equals(sub)) {
            if ((str.substring(str.length() - sub.length())).equals(sub)) {
                return str.length();
            } else {
                return strDist(str.substring(0, str.length() - 1), sub);
            }
        } else {
            return (strDist(str.substring(1), sub));
        }
    }
    return 0;
}

您可能想问一个问题。
return str.split(sub)[1]有什么问题。length()+sub.length()*2?我必须同意这里的@shmosel-你能编辑以包含一个实际问题吗?非常感谢Ole V.V.在遵循你的建议后,我让它工作了。public int strist(String str,String sub){if(str.length()>=sub.length()){if((str.substring(0,sub.length()).equals(sub)){if((str.substring(str.length()-sub.length())).equals(sub)){return str.length();}else{return str.substring(0,str.length()-1,sub);}}else{return str.substring(1,sub));}return 0;}