字符串压缩循环逻辑

时间:2013-09-11 13:29:40

标签: java string compression

我的字符串压缩循环有点偏。过去5天我一直在做这项任务,我无法弄清楚我的生活有什么不对。有人可以帮助我吗?

例如,我传递了字符串"TTTTrrrEe",而不是获取T4r3Ee,我得到T4r3EeTT。我不知道为什么它会像这样跳回到字符串的开头,但我越来越近了。我们只能使用charAtequalslength和{{1来自字符串类。

有人可以通过帮助纠正我的逻辑来帮助指导我朝着正确的方向前进吗?我仍然想尝试自己编写代码,看看它是如何分配的。

substring

6 个答案:

答案 0 :(得分:3)

由于这是一个学习练习,我不会尝试修复你的代码,只需指出一些事情来解决它:

  • 如果您将if (i !=s.length()-1)循环条件更改为for
  • ,则循环内的i < s.length()-1条件变得不必要
  • 比较子字符串比较单个字符更容易(也更快)。您可以通过调用i获取位置char ch1 = s.charAt(i)的角色,并使用==运算符比较两个角色,而不是在其上调用equals()
  • count为零(您的count < 1条件等同于count == 0)时,除了{{1}的第一个字符外,还会打印当前字符和后面的字符。然后是计数。这看起来不正确。
  • 在循环中增加temp,而不是在每次迭代时设置它。这看起来不正确。
  • 使用StringBuildertemp时,使用tempappend(),而不是使用普通String并执行连接,这是一种更好的{{1}}增长方式。

答案 1 :(得分:0)

尝试使用这样的逻辑;

int count = 0;
for(int i =0; i < string.length()-1; i++){
    if(string.charAt(i) == string.charAt(i + 1)){
        count++;
        // DO SOME OPERATION
    }
}

答案 2 :(得分:0)

temp = s.substring(count,count+1);位置i)无关,但 size

事实上,我会尝试用外在的合理名称重写它:

char repeatedChar = `\u0000`; // Not present.
int repetitions = 0;

由于没有名字count,你遇到了麻烦。

答案 3 :(得分:0)

工作代码:

public  class HelloWorld  {

public static void compress(String s){

    StringBuilder buff = new StringBuilder();

    char tmp = '\0';

    int index = 1;

    for(int i = 0; i < s.length(); i++){

        char curr = s.charAt(i);            

        if(buff.length() == 0){             
            tmp = curr;
            buff.append(tmp);
            continue;
        }           

        if(curr == tmp){
            index++;
        }
        else{                   
            if(index > 1){
                buff.append(index);
                index = 1;
                tmp = curr;
            }

            buff.append(curr);              
        }


    }

    System.out.println(buff.toString());

}


public static void main(String args[]){
    compress("TTTTrrrEe");
}
 }

输出:T4r3Ee

compress("TTsssssssssssTTrrrEe");

输出:T2s11T2r3Ee

答案 4 :(得分:0)

尝试这个

    public class Compress {

        /**
         * @param args
         * @author Rakesh KR
         */
         public static String encode(String source) {
                StringBuffer dest = new StringBuffer();
                for (int i = 0; i < source.length(); i++) {
                    int runLength = 1;
                    while (i+1 < source.length() && source.charAt(i) == source.charAt(i+1)) {
                        runLength++;
                        i++;
                    }
                    dest.append(source.charAt(i));
                    dest.append(runLength);
                }
                return dest.toString();
            }

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String example = "aaaaaaBBBBccc";
            System.out.println("Encode::"+encode(example));
        }

    }

答案 5 :(得分:0)

String temp = s.substring(0,1);

temp.equals(s.substring(i,i+1))

如果是这两个句子,您应该使用char而不是String,因此:

char temp = s.charAt(0)

temp == s.charAt(i)

我将从3个变量开始:

char lastCharacter = inputString.charAt(0); int count = 1; String result = "";

然后继续在循环中处理输入字符串:

if (length <= 1) return inputString;
for i = 1 ; i < length;i++
    if (inputString.charAt(i) == lastCharacter && i != length-1)
        count++
    else
        if count == 1 
            result += lastCharacter
        else 
            result = result + lastCharacter + count;
            count = 1;
        end if
        lastCharacter = inputString.charAt(i);
    end if
end for
return result;
相关问题