java - 如何在没有任何 for 循环的情况下递归地解压缩字符串?

标签 java recursion compression

对于我的作业,我必须能够在没有 for 循环的情况下递归地解压缩字符串。我在尝试限制自己使用 for 循环时遇到了一些麻烦,如果我能得到一些帮助,我将不胜感激。最后,我有一个 for 循环,我想知道是否有一种方法可以用其他东西删除它,并且仍然让我的程序做我打算做的事情

public class StringRec {
    public static void main(String[] args) {
        System.out.println("What text do you want to decompress?");
        String compressedText = IO.readString();
        System.out.println(decompress(compressedText));
    }
    public static String decompress(String compressedText) {
        if (compressedText.length()<=1){
            return compressedText;
        }
        String first=""; 
        String rest=""; 
        char c = compressedText.charAt(0); 
        if (Character.isLetter(c) == true) {
            first = compressedText.substring(0,1); 
            rest = compressedText.substring(1); 
            return first + decompress(rest); 
        } else { 
            first = compressedText.substring(1,2); 
            rest = compressedText.substring(2); 
            int x = compressedText.charAt(0)-'0'; 
            char y = compressedText.charAt(1);
            String tst = "";

            for(int i = 0; i < x; i++) {
                tst = tst+y;
            }

            return tst + decompress(rest); 
        } 
    }
}

最佳答案

使用 while 循环来做同样的事情。

int i = 0;
while(i < x) {
    i++;
    tst += y;
}

如果你不能完全使用循环,那么就使用递归。

int i = 0;

public String recursiveAppend(String tst) {
    if(i >= x) {
        i = 0;
        return tst;
    }
    else return recursiveAppend(tst + y);
}

如果您使用的是 > Java 1.5,则使用 String tst = new String(new char[x]).replace('\0', y);。 (来自here)

关于java - 如何在没有任何 for 循环的情况下递归地解压缩字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348711/

相关文章:

compression - 文件需要多大才能从 gzip 压缩中受益?

php - 如何用php压缩站点地图

java - 如何检查数组中 4 个不同的数字是否彼此相等?

algorithm - 二叉树递归层序遍历的时间复杂度是多少

c - 我的递归质数函数代码有一些错误

java - 使用递归绘制树

java - 将矩形图像绘制/变形为四边形图像

java - 在 ArrayList 或 Map 中添加树/图的 n 个节点的空间复杂度

java - Java 中的字符串添加显示意外行为

使用 LZW 压缩来压缩 ZIP 文件会创建尺寸过大的压缩文件