Java 使用递归替换字符串中某个索引处的字符

Java 使用递归替换字符串中某个索引处的字符,java,string,recursion,substring,Java,String,Recursion,Substring,嗨,我正在尝试创建一个方法来递归地删除单词中的空格。到目前为止我都这么做了,我真的不知道为什么它不起作用 public static String compact (String line) { for (int x = 0 ; x < line.length () ; x++) { if (line.charAt (x) == ' ') { String newLine = line.substring (0, x

嗨,我正在尝试创建一个方法来递归地删除单词中的空格。到目前为止我都这么做了,我真的不知道为什么它不起作用

public static String compact (String line)
{

    for (int x = 0 ; x < line.length () ; x++)
    {
        if (line.charAt (x) == ' ')
        {
            String newLine = line.substring (0, x) + line.substring (x);
            return compact (newLine);
        }
        else
            break;
    }
    return line;
}
公共静态字符串压缩(字符串行)
{
对于(int x=0;x
这只返回原始字符串,不删除任何空格。 有人能告诉我我做错了什么吗,谢谢。

只要拆下

else break;  
部分,因为如果字符串的第一个字符不是空白,循环将终止

也代替

String newLine = line.substring (0, x) + line.substring (x);

因为您实际上并没有删除空格,而是一次又一次地复制整个字符串。这就是为什么会出现
堆栈溢出错误


方法应如下所示:

public static String compact(String line) {
    for (int x = 0; x < line.length(); x++) {
        if (line.charAt(x) == ' ') {
            String newLine = line.substring (0, x) + line.substring (x+1);
            return compact(newLine);
        }
    }
    return line;
}
公共静态字符串压缩(字符串行){
对于(int x=0;x
只需卸下

else break;  
部分,因为如果字符串的第一个字符不是空白,循环将终止

也代替

String newLine = line.substring (0, x) + line.substring (x);

因为您实际上并没有删除空格,而是一次又一次地复制整个字符串。这就是为什么会出现
堆栈溢出错误


方法应如下所示:

public static String compact(String line) {
    for (int x = 0; x < line.length(); x++) {
        if (line.charAt(x) == ' ') {
            String newLine = line.substring (0, x) + line.substring (x+1);
            return compact(newLine);
        }
    }
    return line;
}
公共静态字符串压缩(字符串行){
对于(int x=0;x
您可以摆脱for循环,并在一行代码中修复它

就用

  //changes a string "moon shine" to "moonshine"
  String newLine = line.trim().replaceAll(" +", "");
  System.out.println(newLine);

您可以去掉for循环,并在一行代码中修复它

就用

  //changes a string "moon shine" to "moonshine"
  String newLine = line.trim().replaceAll(" +", "");
  System.out.println(newLine);

你为什么要这样做/提示:删除for循环,添加一个参数来确定“char array”中当前选定的字符,这样做您可以完成一个完全递归的循环,也不要忘记删除空格后字符数会发生变化,你也必须给他一个新的字符串,但实际上这是一个糟糕的做法,我不认为对这样的东西使用递归是有意义的。如果你想练习递归,可以对文件夹、删除等进行操作。你为什么要这样做/提示:删除for循环,添加一个参数来确定“char array”中当前选定的字符,这样做您可以完成一个完全递归的循环,也不要忘记删除空格后字符数会发生变化,你也必须给他一个新的字符串,但实际上这是一个糟糕的做法,我不认为对这样的东西使用递归是有意义的。如果你想练习递归,可以使用文件夹、删除等方法,并替换
String newLine=line.substring(0,x)+line.substring(x)带有
字符串换行符=line.substring(0,x)+line.substring(x+1)我将添加它。谢谢@henryabra@Noob,查看更新的答案。我已经对它进行了测试,它可以很好地工作并替换
String newLine=line.substring(0,x)+line.substring(x)带有
字符串换行符=line.substring(0,x)+line.substring(x+1)我将添加它。谢谢@henryabra@Noob,查看更新的答案。我已经测试过了,效果很好,我很确定OP是作为递归中的类练习来做的,而不是认为这是最好的方法…我很确定OP是作为递归中的类练习来做的,而不是认为这是最好的方法。。。