weydile228

Java ebanaya

Oct 2nd, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.82 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class Tasks {
  4.  
  5.     //Архиватор
  6.     private static ArrayList<String> rleArch(String text) {
  7.         int tmp = 1;//Счётчик повторений символа
  8.         char c;//Повторяющийся символ
  9.         ArrayList<String> result = new ArrayList<>();
  10.         char textArray[] = text.toCharArray();
  11.         for (int i = 0; i < textArray.length - 1; i++) {
  12.             //Считаем количество повторений символа
  13.             if (textArray[i] == textArray[i + 1]) {
  14.                 tmp++;
  15.             } else {
  16.                 c = textArray[i];
  17.                 //Записываем символ в массив
  18.                 result.add(c + String.valueOf(tmp));
  19.                 //Сбрасываем счётчик
  20.                 tmp = 1;
  21.             }
  22.         }
  23.         return result;
  24.     }
  25.  
  26.     //Разархиватор
  27.     private static StringBuilder rleRearch(ArrayList<String> archStr) {
  28.         StringBuilder result = new StringBuilder();
  29.         for (String str : archStr) {
  30.             char c[] = str.toCharArray();//разибраем зашифрованный символ и кол-во его повторений на массив символов
  31.             String tmpStr[] = new String[c.length - 1];
  32.             StringBuilder tmpStr2 = new StringBuilder();
  33.             //Если число повторений больше 9 и занимает больше одного слота в массиве переводим char в String и только потом в int
  34.             if (c.length > 2) {
  35.                 for (int j = 1; j < c.length; j++) {
  36.                     tmpStr[j - 1] = String.valueOf(c[j]);
  37.                     tmpStr2.append(tmpStr[j - 1]);
  38.                     int tmp1 = Integer.parseInt(tmpStr2.toString());
  39.                     result.append(repeatString(c[0], tmp1));
  40.                 }
  41.             //Иначе сразу переводим число в int
  42.             } else{
  43.                 int tmp1 = Integer.parseInt(String.valueOf(c[1]));
  44.                 result.append(repeatString(c[0], tmp1));
  45.             }
  46.         }
  47.         return result;
  48.     }
  49.     //Повторяет строку нужное количество раз.
  50.     private static String repeatString(char s, int count) {
  51.         StringBuilder r = new StringBuilder();
  52.         for (int i = 0; i < count; i++) {
  53.             r.append(s);
  54.         }
  55.         return r.toString();
  56.     }
  57.  
  58.     public static void main(String[] args) {
  59.         String text = "ТТТТТТТТТТТТТУУУУУУУТТТТТТТ ММММННННОООГГООО ПООООООВВВВВТТТТТОООРРООВВ.";
  60.         System.out.println(rleArch(text));
  61.         System.out.println(rleRearch(rleArch(text)));
  62.  
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment