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

时间:2014-02-27 14:18:27

标签: 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) + line.substring (x);
            return compact (newLine);
        }
        else
            break;
    }
    return line;
}

这只返回原始字符串而不删除任何空格。 有人可以告诉我,我做错了什么,谢谢。

2 个答案:

答案 0 :(得分:4)

只需删除

即可
else break;  

部分,因为如果String的第一个字符不是空格,则循环将终止

同时替换

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

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

因为你实际上没有删除空格,而是一遍又一遍地复制整个字符串。这就是你获得StackOverflowError

的原因

该方法应如下所示:

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;
}

答案 1 :(得分:0)

你可以摆脱for循环并在一行代码中修复它......

只需使用..

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