Java解码RLE字符串

Java解码RLE字符串,java,string,Java,String,例如,如果我有如下输入: H9e3e2l5o 输出必须是: Heeeeeeeeeeeellooooo 这是我到目前为止编写的代码: public class RLE { public static String decode(String st) { char[] stArr = st.toCharArray(); char lastseen = 0; StringBuilder sb = new StringBuilder(); for (char

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

H9e3e2l5o
输出必须是:

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

public class RLE {
    public static String decode(String st) {

    char[] stArr = st.toCharArray();
    char lastseen = 0;
    StringBuilder sb = new StringBuilder();
    for (char s : stArr) {
        if (!Character.isDigit(s)) {
            lastseen = s;
            sb.append(s);
        } else {
            int n = Integer.parseInt(String.valueOf(s));
            for (int i = 0; i < n - 1; i++) {
                sb.append(lastseen);
            }
        }
    }
    return sb.toString();
}

我假设是通用变量,这里是修正版本:

public static String decode(final String st) {
    final StringBuilder sb = new StringBuilder();

    final char[] chars = st.toCharArray();

    int i = 0;
    while (i < chars.length) {
        int repeat = 0;
        while ((i < chars.length) && Character.isDigit(chars[i])) {
            repeat = repeat * 10 + chars[i++] - '0';
        }
        final StringBuilder s = new StringBuilder();
        while ((i < chars.length) && !Character.isDigit(chars[i])) {
            s.append(chars[i++]);
        }

        if (repeat > 0) {
            for (int j = 0; j < repeat; j++) {
                sb.append(s.toString());
            }
        } else {
            sb.append(s.toString());
        }
    }

    return sb.toString();
}

@Test
public void test() {
    Assert.assertEquals("abb", decode("1a2b"));
    Assert.assertEquals("aaaaaaaaaa", decode("10a"));
    Assert.assertEquals("baaaaaaaaaa", decode("b10a"));
    Assert.assertEquals("abab", decode("2ab"));
    Assert.assertEquals("Heeeeeeeeeeeellooooo", decode("H9e3e2l5o"));
}
公共静态字符串解码(最终字符串st){
最终StringBuilder sb=新StringBuilder();
最终字符[]字符=圣托卡雷();
int i=0;
而(i<字符长度){
int repeat=0;
while((i0){
对于(int j=0;j
public static String decode(final String st) {
    final StringBuilder sb = new StringBuilder();

    final char[] chars = st.toCharArray();

    int i = 0;
    while (i < chars.length) {
        int repeat = 0;
        while ((i < chars.length) && Character.isDigit(chars[i])) {
            repeat = repeat * 10 + chars[i++] - '0';
        }
        final StringBuilder s = new StringBuilder();
        while ((i < chars.length) && !Character.isDigit(chars[i])) {
            s.append(chars[i++]);
        }

        if (repeat > 0) {
            for (int j = 0; j < repeat; j++) {
                sb.append(s.toString());
            }
        } else {
            sb.append(s.toString());
        }
    }

    return sb.toString();
}

@Test
public void test() {
    Assert.assertEquals("abb", decode("1a2b"));
    Assert.assertEquals("aaaaaaaaaa", decode("10a"));
    Assert.assertEquals("baaaaaaaaaa", decode("b10a"));
    Assert.assertEquals("abab", decode("2ab"));
    Assert.assertEquals("Heeeeeeeeeeeellooooo", decode("H9e3e2l5o"));
}