Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.72 KB | None | 0 0
  1. package javap;
  2. import java.util.Scanner;
  3.  
  4. public class uppg6 {
  5.     public static void main(String[] args) {
  6.         Scanner scan = new Scanner(System.in);
  7.         String text = scan.nextLine();
  8.  
  9.         String output = decompress(text);
  10.         System.out.println(output);
  11.        
  12.         scan.close();
  13.     }
  14.  
  15.     private static String decompress(String text) {
  16.         int i = 0;
  17.         if(text.equals("") || text.length() == 1) return text;
  18.  
  19.         //LETTER
  20.         if(Character.isLetter(text.charAt(i))){
  21.             return text.substring(0,1) + decompress(text.substring(1)); //ret letter and decompress rest
  22.         }
  23.  
  24.         //DIGIT
  25.         else if(Character.isDigit(text.charAt(i))){
  26.             int number = Integer.parseInt(text.substring(0,1));
  27.             if(Character.isDigit(text.charAt(i+1))){ //covers 1-99
  28.                 number = Integer.parseInt(text.substring(0,2));
  29.             }
  30.  
  31.             int len = Integer.toString(number).length();
  32.  
  33.             if(text.charAt(i+len) == '('){ //new substring
  34.                 int left = 1;
  35.                 int right = 0;
  36.                 int endPos = 0;
  37.                
  38.                 while(right != left){
  39.                     for(endPos = text.indexOf(text.charAt(i+len+1)); endPos < text.length(); endPos++){
  40.                         if(text.charAt(i+len+endPos) == ')'){
  41.                             right++;
  42.                         }
  43.                         else if(text.charAt(i+len+endPos) == '('){
  44.                             left++;
  45.                         }
  46.                         endPos++;
  47.                     }
  48.                 }
  49.              
  50.                 return multiple(text.substring(len+1, endPos), number) + decompress(text.substring(endPos+1));
  51.             }
  52.             else{ //if letter after digit
  53.                 return multiple(text.substring(len, len+1), number) + decompress(text.substring(len+1));
  54.             }          
  55.  
  56.         }
  57.         return text;
  58.  
  59.     }
  60.  
  61.     private static StringBuilder multiple(String substring, int number) {
  62.         StringBuilder sb = new StringBuilder();
  63.         int i = 0;
  64.         while (i<number){
  65.             sb.append(decompress(substring));
  66.             i++;
  67.         }
  68.         return sb;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement