当前位置: 首页 > 知识库问答 >
问题:

(Java)在递归方法中创建子字符串时遇到麻烦

张坚白
2023-03-14
public static int count(String str, char a)
{

    if (str.charAt(str.length() - 1) != a)
        return 0;
    else
        return 1 + count(str.substring(0, str.length()), a);
}
str.substring(0, str.length())

所以按照我编写的方式,它应该返回一个子字符串,该子字符串包含原始字符串中除最后一个字符以外的所有字符,从而通过递归每次删除字符串的一个字符。

我可以理解为什么这样做可能会有问题,因为当字符串长度为1或0时,没有什么可以告诉递归停止的,但由于问题是StackOverflowError而不是IndexOutOfBounds异常,我有点迷惑了。

共有1个答案

缪茂勋
2023-03-14

您应该使用[string-the_last_character](递归)调用该方法,因为最后一个字符已经被检查和计数。

而且,您必须检查字符串是否为空以停止递归。

试试看:

public static int count(String str, char a)
{

  if(str.length() == 0) // here we have to stop the recursion as the string is empty!
      return 0;
  if (str.charAt(str.length() - 1) != a)
      return count(str.substring(0, str.length() - 1), a); // here we send the string - the last character which has been already checked.
  else
      return 1 + count(str.substring(0, str.length() - 1), a);
}
 类似资料:
  • 我想按以下顺序打印子字符串:-“”,“D”,“C”,“CD”,“B”,“BD”,“BC”,“BCD”,“A”,“AD”,“AC”,“ACD”,“AB”,“ABD”,“ABC”,“ABCD” 在这里,最后4个阵型的“a”不见了

  • 我是新来的React Native,刚刚用React Native init rnapp命令创建了一个应用程序,它发出了许多警告: 然后我转到android文件夹并运行以下命令: 但我明白了: * 有人知道如何修复这个问题,并在这个空应用程序上为Android构建apk文件吗?

  • 本文向大家介绍java递归法求字符串逆序,包括了java递归法求字符串逆序的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java递归法求字符串逆序的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的java程序设计有所帮助。

  • 问题内容: 我在尝试搜索字符串中的子字符串时遇到问题。该子字符串可能在字符串中也可能不在字符串中。 我知道是否可以完成的两种方法是: 正则表达式 但是,还有其他“优化”方式吗?你会怎么做? Ruby可以提供更好的答案吗?由于我们使用jRuby,因此答案可以是Ruby或Java。 问题答案: 在Ruby中,使用方法: 返回。

  • 我遇到了一个问题,在我已经工作的递归函数中添加了一个助手方法,只使用了2个参数,当添加第三个(助手方法)时,我的代码中断并寻找解决方案。该程序使用扫描仪对字符串进行键盘输入,对字符进行另一次输入,然后输出字母的出现次数。该错误发生在第二条if语句和两条return语句上。在第二次键盘输入后,我发现了错误: 线程"main"中的异常java.lang.StringIndexOutOfBoundsEx