javarle升级算法

javarle升级算法,java,url-encoding,Java,Url Encoding,例如,如果我有如下输入: 嗨,嗨,嗨,嗨 输出必须是: H9e3e2l5o 这是我到目前为止编写的代码: public class RLE { public static String encode(String s) { if (s == "" || s == null) return ""; StringBuilder sb = new StringBuilder(); int count = 1

例如,如果我有如下输入:

嗨,嗨,嗨,嗨

输出必须是:

H9e3e2l5o

这是我到目前为止编写的代码:

    public class RLE {
        public static String encode(String s) {
            if (s == "" || s == null) return "";
            StringBuilder sb = new StringBuilder();
            int count = 1;
            char previous = s.charAt(0);
            char current;

            for (int i = 1; i < s.length(); i++) {
                current = s.charAt(i);
                if (current == previous) {
                    count++;
                } else {
                    if (count == 1) {
                        sb.append(previous);
                    } else if (count > 1) {
                        sb.append(count).append(previous);
                        count = 1;
                    }
                }
                previous = current;

            }

            return sb.toString();
        }
公共类RLE{
公共静态字符串编码(字符串s){
如果(s==“”| | s==null)返回“”;
StringBuilder sb=新的StringBuilder();
整数计数=1;
char previous=s.charAt(0);
炭流;
对于(int i=1;i1){
追加(计数)追加(先前的);
计数=1;
}
}
先前=当前;
}
使某人返回字符串();
}
结果:

‘Heeeeelloooo’->H12e2l

代码丢失了

if (count > 1) {
  sb.append(count);
}
sb.append(previous)

在for循环之后。

您缺少字符串的最后一个字符等于前一个字符的大小写,则该字符不打印。在if(current==previous)大小写中也添加增量逻辑

                    if (current == previous) {
                    count++;
                    if(i == s.length()-1){
                        if (count == 1) {
                            sb.append(previous);
                        } else if (count > 1) {
                            sb.append(count).append(previous);
                            count = 1;
                        }
                    }
                }
这对你有用

public static String encode(String s) {
    if (s == "" || s == null)
        return "";
    StringBuilder sb = new StringBuilder();
    int count = 1;
    char previous = s.charAt(0);
    char current;

    for (int i = 1; i < s.length(); i++) {
        current = s.charAt(i);
        if (current == previous) {
            count++;
        } else {
            if (count == 1) {
                sb.append(previous);
            } else if (count > 1) {
                if (count > 9) {
                    sb.append(9).append(previous);
                    sb.append(count - 9).append(previous);
                } else {
                    sb.append(count).append(previous);
                }
                count = 1;
            }
        }
        previous = current;

    }
    sb.append(count).append(previous);
    return sb.toString();
}
公共静态字符串编码(字符串s){
如果(s==“”| | s==null)
返回“”;
StringBuilder sb=新的StringBuilder();
整数计数=1;
char previous=s.charAt(0);
炭流;
对于(int i=1;i1){
如果(计数>9){
附加(先前的);
某人追加(计数-9)。追加(先前);
}否则{
追加(计数)追加(先前的);
}
计数=1;
}
}
先前=当前;
}
追加(计数)追加(先前的);
使某人返回字符串();
}

您的问题是什么?我知道您的代码没有提供预期的输出。但我不明白的是,您的Hello应该导致H9e3e…(您的第一个示例是将12分解为9+3…但是…为什么?为什么是9+3?