【问题标题】:Compress string method isn't returning a new string?压缩字符串方法不返回新字符串?
【发布时间】:2018-11-08 06:04:05
【问题描述】:

我正在尝试制作一种压缩字符串的方法。例如,该方法将采用“ttttests”并返回“4te2st”。

当我运行该方法并打印结果时,我得到:“”

public class Compress {

public static String compress(String original){
    int count = 1;
    int oglength = original.length()-1;
    StringBuilder newword = new StringBuilder("");
    for(int i = 0; i < oglength; i = i+count){
        count = 1;
        for(int k = 1; k < oglength-k-i; k++){
            if(original.charAt(i) == original.charAt(i+k)){
                count++;
                continue;
            } else if(original.charAt(i) != original.charAt(i+k) && original.indexOf(original.charAt(i+k)) - original.indexOf(original.charAt(i)) > 1){
                newword.append(newword);
                newword.append(count);
                newword.append(original.charAt(i));
                break;
            } else if(original.charAt(i) != original.charAt(i+k) && original.indexOf(original.charAt(i+k)) - original.indexOf(original.charAt(i)) == 1){
                newword.append(newword);
                newword.append(original.charAt(i));
                count++;
                break;
            }
        }
    }
    String returnword = newword.toString();
    return returnword;
}

【问题讨论】:

  • 您是否尝试打印出现的 char 值?如果是,那么根据您的输入,输出应该是 2s5t1e。
  • 字符串保持相同的顺序,只有相同字符的连续字符串才会有该字符的出现次数。

标签: java string methods compression


【解决方案1】:

压缩方法在重复使用增量索引的情况下不附加任何内容。

这是基于您的方法的工作版本:

public static String compress(String original) {
    int count;
    StringBuilder builder = new StringBuilder();

    for (int i = 0; i < original.length(); i = i + count) {
        count = 1;
        for (int k = i + 1; k < original.length(); k++) {
            if (original.charAt(i) == original.charAt(k)) {
                count++;
            } else {
                break;
            }
        }

        if (count > 1) {
            builder.append(count).append(original.charAt(i));
        } else {
            builder.append(original.charAt(i));
        }
    }
    return builder.toString();
}

【讨论】:

    【解决方案2】:

    我认为你对你的程序感到困惑,因为你有 unnnecessary loops 会增加复杂性,if-else ladder 会比较你无法记住的字符(这是debugging 可能会帮助你的地方) .

    我不明白你想要通过什么用例,但如果你想要上面提到的内容,那么下面的代码 sn-p 会为你做。

    Note:我只考虑了基本场景。对于大量的测试用例,可能需要很少的小改动。

    public class Demo {
    
    public static String compress(String original){
        int count = 0;
        char temp = original.charAt(0);
        StringBuilder sb = new StringBuilder("");
        for(int i=0;i<original.length();i++) {
    
            if(original.charAt(i)==temp) {
                count++;
            }else {
                if(count!=1)
                    sb.append(count).append(temp);
                else
                    sb.append(temp);
    
                count=1;
    
                temp=original.charAt(i);
                continue;
            }
    
        }
        if(count!=1)
            sb.append(count).append(temp);
        else
            sb.append(temp);
        //Above four lines get last character 
        //and its occurrence if it's more than 1. 
    
    
        return sb.toString();
    }
    
    public static void main(String args[]) {
        System.out.println(compress("ttttesst")); 
    //Enter desired String value here.
    //Also you may make it user-interactive.
    }
    }
    

    您也可以参考以下链接, Count number of occurrence of charactersHashMap ImplementationHashing used for counting occurrence of character 以更好地了解如何解决此类问题。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2020-04-13
      • 2023-03-30
      • 2020-01-22
      • 1970-01-01
      相关资源
      最近更新 更多