2014-01-07 4 views
-1

Я должен сделать алгоритм RLE в Java с экранирующим символом (Q)RLE алгоритм сжатия Java

примером 1, если я иметь вход как:

77777 => 57 
BBBBBBBBB => 10B 
FBFB8923 => 004FBFB8923 
2365553422 => 005236555342200 

это код, который я сделал :

public String coderRLE(string text) { 
      String res = new String(); 
      char[] charArray = text.toCharArray(); 
      char caractere = 0; 
      int num = 0; 
      int i = 0; 
      for (char c : charArray) { 
       if (c != caractere && i != 0) { 
        if (num >= 2) { 
         res += num; 
         res += caractere; 
        } else { 
         res += caractere; 
        } 
        num = 1; 
       } else { 
        num++; 
       } 
       caractere = c; 
       i++; 
      } 
      if (num >= 2) { 
       res += num; 
       res += caractere; 
      } else { 
       res += caractere; 
      } 
      return res; 
    } 

public String decoderRLE(String text) { 
      String res = new String(); 
      char[] charArray = text.toCharArray(); 
      for (int i = 0;i<charArray.length-1;i++) { 
       char s = charArray[i]; 
       if (!Character.isDigit(s)) { 
        res += s; 
       } else { 
        int num = Integer.parseInt(String.valueOf(s)); 
        for (int j = 0; j < num - 1; j++) { 
         res += charArray[i+1]; 
        } 
       } 
      } 
      return res; 
     } 

проблема с номером, как thisaaabbcccc666iii => aaabbcccc6633333ii

+0

Вы не описать проблему вы имеете с "числом, как это" и нет актуального вопроса относительно этой проблемы. Это о числовых символах? Кодирование или декодирование? Как вы думаете, что происходит не так? И т.д.. – zapl

ответ

0

Try,

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(runLength); 
     dest.append(source.charAt(i)); 
    } 
    return dest.toString(); 
} 

если вход aaabbcccc666iii он сжимает его как 3a2b4c363i

String example = "aaabbcccc666iii"; 
System.out.println(encode(example)); 

Выход

3a2b4c363i 
Смежные вопросы