java - 字符串压缩循环逻辑

标签 java string compression

我的字符串压缩 for 循环有点偏离。在过去的 5 天里,我一直在处理这项任务,但我终究无法弄清楚哪里出了问题。有人可以帮帮我吗?

例如,我传递了字符串 "TTTTrrrREe",我得到的不是 T4r3Ee,而是 T4r3EeTT。我不知道为什么它会那样跳回到字符串的开头,但我越来越接近了。我们只能使用 charAt,equals,length 和来自字符串类的 substring

有人可以通过帮助纠正我的逻辑来帮助我朝着正确的方向前进吗?我仍然想尝试自己编写代码,将其视为一项任务。

public static String compress(String s){
    int count = 0;
    String temp = s.substring(0,1);
    for(int i = 0; i < s.length(); i++){
        if(i !=s.length()-1){
            if(temp.equals(s.substring(i,i+1))){
                count++;

            }else{

                if(count < 1){
                    System.out.print(s.substring(i,i+2));
                    System.out.print(temp.substring(0,1) );
                }else{
                    System.out.print("" + temp.substring(0,1) + count);
                    i--;
                    temp = s.substring(count,count+1);
                    System.out.println(" temp is now " + temp);

                    count = 0;
                    //i--;
                }
            }
        }

    }

    System.out.println(temp);

    return temp;
}

最佳答案

由于这是一个学习练习,我不会尝试修复您的代码,只是指出一些需要改进的地方:

  • if (i !=s.length()-1)如果您更改 for,则循环内的条件变得不必要循环条件为 i < s.length()-1
  • 比较单个字符比比较子字符串更容易(也更快)。您在位置 i 处得到一个字符调用char ch1 = s.charAt(i) , 并使用 == 比较两个字符运算符(operator),而不是调用 equals()在他们身上。
  • 何时count为零(您的 count < 1 条件相当于 count == 0 )除了 temp 的第一个字符外,您还打印当前字符及其后的字符其次是伯爵。这看起来不正确。
  • 而不是增长temp当你通过循环时,你在每次迭代中设置它。这看起来不正确。
  • 更好的成长方式 temp当你通过循环时使用 StringBuilder append() ,而不是使用普通的 String ,并执行连接。

关于java - 字符串压缩循环逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18742610/

相关文章:

java - Android - 通过图像压缩优化应用程序性能

java - 压缩Excel文件、JAVA的问题

java - 显示具有多个航点的两点之间的路线 Android Here Map Lite Edition

java - G1 的 ParallelGCThreads

java - Android 在没有 new mClass() 的情况下将类创建到单独的文件中...?

javascript - 从数组中拆分具有多个分隔符的字符串

c - 如何有效地将十六进制编码的字符串转换为 C 中的字符串

python - 在python中快速修改字符串

compression - jpeg 压缩率

java.sql.SQLSyntaxErrorException::ORA-00907: 缺少右括号错误