Cod sursa(job #1361054)

Utilizator devLucian93Lucian Alexandru devLucian93 Data 25 februarie 2015 19:23:00
Problema Convertor Scor 70
Compilator java Status done
Runda rosedu_cdl_2015 Marime 6.84 kb
import java.io.*;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.io.PrintWriter;
 // test solution. to be refactored 
public class Main {
 //   private static final int CURLY_OPEN = 1;
    private static final int CURLY_CLOSED = 2;
    //private static final int SQUARED_OPEN = 3;
    //private static final int SQUARED_CLOSED = 4;
    private static final int COMMA = 5;
    private static final int COLON = 6;
    private static final int STRING = 7;
    private static final int NUMBER = 8;
  
    private static boolean keys = true;
     
    public static void main(String[] args)throws IOException
    {  
    	Pattern splitRegex = Pattern.compile("\\s*+");
    	Pattern stringRegex = Pattern.compile("\"");
    	String result ="";
        Scanner reader = new Scanner(new FileInputStream("convertor.in"));
        PrintWriter writer = new PrintWriter("convertor.out");
        reader.useDelimiter(splitRegex);
        reader.skip("\\[");
        char token = reader.next().charAt(0);
      //  long start = System.nanoTime();
        while( reader.hasNext() ){
             
            
        	     
            while(keys){
                 
  /*              if(checkToken(token) == CURLY_OPEN){
                    if(reader.hasNext()){
                        token = reader.next().charAt(0);
                         
                    }
                }
  */
            	
                if(checkToken(token) == CURLY_CLOSED){
                    writer.write(result);
                    writer.println("");
                    result="";
                    keys = false;
                    token = reader.next().charAt(0);
                    reader.close();
                    reader = new Scanner(new FileInputStream("convertor.in"));
                    reader.useDelimiter(splitRegex);
                    reader.skip("\\[");
                     
                    
                     
                }
                if(checkToken(token) == STRING ){
                    reader.useDelimiter(stringRegex);
                    if(reader.hasNext()){
                    result = result + reader.next() + ",";  
                    }
                     
                    reader.useDelimiter(splitRegex);
                    token = reader.next().charAt(0);
                     
                    token = reader.next().charAt(0);
                     
 
                     
                }
                if(checkToken(token) == COLON){
                     
                    while( (checkToken(token) != COMMA) && (checkToken(token) != CURLY_CLOSED) ) {
                        token = reader.next().charAt(0);
                         
                    }
                 
                }
                 
                if(checkToken(token) != CURLY_CLOSED){
                    token = reader.next().charAt(0);
                     
                     
                    }
                 
            }
           
            token = reader.next().charAt(0);
             
             
 /*           if(checkToken(token) == CURLY_OPEN){
                while(checkToken(token) != COLON){
                    token = reader.next().charAt(0);    
                }
              }
 */            
             
            if(checkToken(token) == COLON){
                token = reader.next().charAt(0);
                if(checkToken(token) == STRING ){
                    reader.useDelimiter(stringRegex);
                //  if(reader.hasNext()){
                    result = result + reader.next() + ",";  
                //  }
                     
                    reader.useDelimiter(splitRegex);
                    token = reader.next().charAt(0);
                     
                }
                if(checkToken(token) == NUMBER){
                    while(checkToken(token) == NUMBER){
                        result = result + token;
                        token = reader.next().charAt(0);
                   }
                    result = result + ",";
                }
            }
             
            if(checkToken(token) == CURLY_CLOSED){
                writer.write(result);
                writer.println("");
                result="";
            }
             
             
             
    /*      if(checkToken(token) == CURLY_OPEN){
                if(reader.hasNext()){
                    token = reader.next().charAt(0);
                     
                }
            }   
            if(checkToken(token) == CURLY_CLOSED){
                writer.write(result);
                writer.println("");
                result="";
            }
            if(checkToken(token) == STRING ){
                reader.useDelimiter("\"");
                if(reader.hasNext()){
                result = result + reader.next() + ",";  
                }
                 
                reader.useDelimiter("\\s*");
                token = reader.next().charAt(0);
                token = reader.next().charAt(0);
 
                 
            }
            if(checkToken(token) == COLON){
                token = reader.next().charAt(0);
                if(checkToken(token) == STRING ){
                    reader.useDelimiter("\"");
                    if(reader.hasNext()){
                    result = result + reader.next() + ",";  
                    }
                     
                    reader.useDelimiter("\\s*");
                    token = reader.next().charAt(0);
                     
                }
                if(checkToken(token) == NUMBER){
                    while(checkToken(token) == NUMBER){
                        result = result + token;
                        token = reader.next().charAt(0);
                   }
                    result = result + ",";
                }
            }
        */     
             
        }
        writer.close();
        reader.close();
      
    	
       // long elapsedTime = System.nanoTime() - start;
      //  System.out.println(elapsedTime);
         
    }
     
    private static int checkToken(char token){
        switch (token) {
//            case '{':
//                return CURLY_OPEN;
            case '}':
                return CURLY_CLOSED;
            //case '[':
            //  return SQUARED_OPEN;
            //case ']':
            //  return SQUARED_CLOSED;
            case ',':
                return COMMA;
            case '"':
                return STRING;
            case '0': case '1': case '2': case '3': case '4':
            case '5': case '6': case '7': case '8': case '9':
            case '-':
                return NUMBER;
            case ':':
                return COLON;
            default: return 12;
    }
 
    }
     
     
}