【问题标题】:Recursive Method to capitalize all characters and add a space between each in JavaJava中所有字符大写并在每个字符之间添加空格的递归方法
【发布时间】:2020-05-17 16:56:14
【问题描述】:

我正在练习递归方法,我正在研究的三种方法中的一种尝试将整个字符串大写并在每个字符之间添加一个空格。以下是我的代码:

public static String toUpper(String str) {

    char ch;

    if(str.length() == 0) {
        return "";
    }

    ch = str.charAt(0); 

    if(Character.isLowerCase(ch)){
        return Character.toUpperCase(ch) + toUpper(str.substring(1));
    }

    String newString = ch + toUpper(str.substring(1));

    /*
     * This is where my issue is.
     * I assumed using the replace method would work just as it does on any other string;
     * however I am getting incorrect output every time.
     */

    return newString.replace("", " ");

}

但是,除了前两个字符之间之外,它不仅替换为一个空格,而且我一生都无法弄清楚为什么。我已经在另一种非递归方法中测试了这种替换的使用,它的工作方式与我预期的一样。如果您能帮助我理解这一点,将不胜感激。

我的输出如下所示:

 H I       T   H   E   R   E       !       

我想要这个:

H I   T H E R E !

【问题讨论】:

    标签: java string recursion replace character


    【解决方案1】:

    您不应该替换字符,而是首先测试您是否有至少一个字符(否则返回空字符串);如果您至少有一个字符,请将第一个字符大写,然后将其与递归调用您的方法的结果连接起来。喜欢,

    public static String toUpper(String str) {
        if (str.length() < 1) {
            return "";
        }
        return Character.toUpperCase(str.charAt(0)) + toUpper(str.substring(1));
    }
    

    在每个字符之间添加一个空格

    return Character.toUpperCase(str.charAt(0)) 
            + " " + toUpper(str.substring(1));
    

    【讨论】:

    • 这样一个简单的解决方案来解决我想做的事情。不知道为什么我不考虑在两者之间连接一个空格。我仍然不明白为什么对 replace 的调用不起作用,因为它实际上非常适合在与此递归方法完全相同的非递归方法上添加我想要的空格。尽管如此,还是非常感谢你!你不会相信我花了多少时间试图弄清楚这一点。
    • 在每个递归步骤中,您在字符之间添加一个空格,包括您在上一个递归步骤中添加的空格。
    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多