java - 如果没有 Java 的 trim() 方法,如何递归地修剪字符串?

标签 java recursion trim

以下方法使用迭代返回修剪后的字符串。您将如何递归地处理这个问题? Link to source

    public static String allTrim(String str) {
        int j = 0;
        int count = 0;  // Number of extra spaces
        int lspaces = 0;// Number of left spaces
        char ch[] = str.toCharArray();
        int len = str.length();
        StringBuffer bchar = new StringBuffer();
        if (ch[0] == ' ') {
            while (ch[j] == ' ') {
                lspaces++;
                j++;
            }
        }

        for (int i = lspaces; i < len; i++) {
            if (ch[i] != ' ') {
                if (count > 1 || count == 1) {
                    bchar.append(' ');
                    count = 0;
                }
                bchar.append(ch[i]);
            } else if (ch[i] == ' ') {
                count++;
            }
        }
        return bchar.toString();
    }

最佳答案

您可以使用递归并采用两个额外变量来完成此操作,一个用于 startIndex,一个用于 endIndex。您可以在trimAll 方法中获取这些变量,也可以全局声明。

public class TrimSpace {

static String trimAll(String str, int startIndex, int endIndex){
    if(str.charAt(startIndex)!=' ' && str.charAt(endIndex)!=' '){
        return str.substring(startIndex, endIndex+1);
    }
    else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)==' '){
        return trimAll(str, startIndex+1, endIndex-1);
    }
    else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)!=' '){
        return trimAll(str, startIndex+1, endIndex);
    }
    else{
        return trimAll(str, startIndex, endIndex-1);
    }
}

public static void main(String[] args) {

    String str = "   hello   ";
    String result = trimAll(str, 0, str.length()-1);
    System.out.println(result);
    //to count extra spaces you just need to get the length difference 
    int extraSpaces = str.length() - result.length();
    System.out.println(extraSpaces);
}

}

关于java - 如果没有 Java 的 trim() 方法,如何递归地修剪字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58072879/

相关文章:

java - 让jetty实例(通过maven配置)连接到mysql

java - 为什么长期使用后建议更换jdk?

language-agnostic - 在任何情况下我都想在递归上使用显式堆栈吗?

jquery .trim() 与文本框

java - 如何初始化这个特定变量?

Java XSD 代码生成问题

c - 在 C 中用二叉搜索树求总数

c++ - 优化此递归函数[Boggle解析器]

java - 如何将一个文件分割成多个token

PHP 数组修剪空白索引值