2017-04-20 16 views
-1

例:JavaのデコードRLE文字列

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(); 
} 
:これは私がこれまでに書いたコードである

Heeeeeeeeeeeellooooo 

H9e3e2l5o 

出力をする必要が

結果:

'H9e3e2l5o' -> HHHHHHHHHeeeeelllllo 

答えて

0

ここでは、一般的な変形を想定していますが、ここに修正バージョンがあります:

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")); 
} 
関連する問題