【问题标题】:Helper Method: Doubling Chars in a String but stops recursion after first char辅助方法:将字符串中的字符加倍,但在第一个字符后停止递归
【发布时间】:2019-09-23 15:13:27
【问题描述】:

这是我一直坚持的家庭作业。我给了一个 ArrayList,我需要返回一个所有字符都加倍的字符串。输入:abc,输出:aabbcc。我得到的输出是aa,然后它停止了。我已经通过循环多次执行此操作,但似乎无法通过递归获得它。

我尝试重新编辑我的代码并尝试使用计数器,但我得到一个空返回,或者我会得到一个堆栈溢出错误。我去了 Oracles 网站找出我可以使用的其他 String 方法,并尝试用其他方法更改我的代码,但仍然没有运气。

我的其他方法可以将 ArrayList 转换为字符串,但这是我遇到问题的最后一种方法。

public String dupEachChar2(String str) {
    //str is going to be a string with abc in it.
    String x = "";
    int count = 0;

    // I'm checking if there is only 1 char, if so just return it twice to 1 string.
    if(str.length() == 1) {
        return str + str;
    } else if(count != str.length()) {
        //Doubling part that I can not figure out.
        x += str.substring(count, count+1) + str.substring(count, count+1);
        count++;
        dupEachChar2(str.substring(count));
    }
    return x;
}

【问题讨论】:

  • 一定要用递归吗?
  • 如果你不必使用递归,我会使用一行 regex return str.replaceAll("(.)", "$1$1");
  • 很遗憾,我愿意。我非常讨厌它。我仍然无法让它在我的脑海中点击。

标签: java string recursion char


【解决方案1】:

试试这个

public String dupEachChar2(String str) {

        if(str.length() == 1) 
            return str + str;
        else 
            return str.substring(0,1)+str.substring(0,1)+dupEachChar2(str.substring(1));
    }
}

您的代码的问题是您将变量 x(和 count)视为在方法的每个实例之间共享,而实际上每次调用该方法时它都是一个新变量。此外,这里不需要变量 x,因为您打算让它保存整个新字符串,但是您已经从递归方法的先前迭代返回的值中获得了它。至于计数,你可以看看字符串中还剩下多少个字符,(每次砍掉一个),当它们达到 1 时停止。

如果您要花最少的精力使代码正常运行,我会说将 x 作为第二个参数传入,并在您第一次从任何地方调用它时使用 ""。

【讨论】:

  • 非常感谢。我弄错了,但我相信这与我的其他方法有关。
【解决方案2】:

您可以使用 String.replaceAll() 的反向引用功能。要将字符串中的每个字符替换为重复字符,请执行以下操作:

String a = "abc";
String b = a.replaceAll("(.)", "$1$1");
b is now equals to aabbcc

这是它的工作原理。

  • . 表示匹配任何字符,() 是正则表达式的组捕获。
  • $1 表示获取第一个(即#1)组中匹配的内容。然后只需使用它两次将字符加倍。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多