Cod sursa(job #1360728)

Utilizator devLucian93Lucian Alexandru devLucian93 Data 25 februarie 2015 17:30:34
Problema Convertor Scor 60
Compilator java Status done
Runda rosedu_cdl_2015 Marime 5.6 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_CLOSED = 2;
    private static final int COMMA = 5;
    private static final int COLON = 6;
    private static final int STRING = 7;
    private static final int NUMBER = 8;
  
  
     
    public static void main(String[] args)throws IOException
    {   boolean keys = true;
    	Pattern splitRegex = Pattern.compile("\\s*+");
    	String result ="";
    	String firstValues="";
        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);
     
        while( reader.hasNext() ){
             
            
        	     
            while(keys){
                 

            	
                if(checkToken(token) == CURLY_CLOSED){
                    writer.write(result);
                    writer.println("");
                    writer.write(firstValues);
                    writer.println("");
                    result="";
                    keys = false;
                    token = reader.next().charAt(0);
                 /*   reader.close();
                    reader = new Scanner(new FileInputStream("convertor.txt"));
                    reader.useDelimiter(splitRegex);
                    reader.skip("\\[");
                  */   
                    
                     
                }
                if(checkToken(token) == STRING ){
               
                	 if(checkToken(token) == STRING ){
                     	token = reader.next().charAt(0);
                     	reader.useDelimiter("");
                     	while(checkToken(token) != STRING){
                     		
                     			result = result + token;
                     			token = reader.next().charAt(0);
                     			
                     	}
                     	result = result + ",";
                     	reader.useDelimiter(splitRegex);
                     
                	 }
                }
                if(checkToken(token) == COLON){
                     
                 /*   while( (checkToken(token) != COMMA) && (checkToken(token) != CURLY_CLOSED) ) {
                        token = reader.next().charAt(0);
                         
                    } 
                 */ token = reader.next().charAt(0);
                	if(checkToken(token) == STRING ){
                     	token = reader.next().charAt(0);
                     	reader.useDelimiter("");
                     	while(checkToken(token) != STRING){
                     		
                     			firstValues = firstValues + token;
                     			token = reader.next().charAt(0);
                     			
                     	}
                     	firstValues = firstValues + ",";
                     	reader.useDelimiter(splitRegex);
                     
                	 }
                	 if(checkToken(token) == NUMBER){
                         while(checkToken(token) == NUMBER){
                             firstValues = firstValues + token;
                             token = reader.next().charAt(0);
                        }
                         firstValues = firstValues + ",";
                     }
                 
                }
                 
                if(checkToken(token) != CURLY_CLOSED){
                    token = reader.next().charAt(0);
                     
                     
                    }
                 
            }
           
            token = reader.next().charAt(0);
             
             
      
             
            if(checkToken(token) == COLON){
                token = reader.next().charAt(0);
                if(checkToken(token) == STRING ){
                	token = reader.next().charAt(0);
                	reader.useDelimiter("");
                	while(checkToken(token) != STRING){
                		
                			result = result + token;
                			token = reader.next().charAt(0);
                			
                	}
                	result = result + ",";
                	reader.useDelimiter(splitRegex);
               
                }
                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="";
            }
             
             
             
   
        }
        writer.close();
        reader.close();
      
    	
       
    }
     
    private static int checkToken(char token){
        switch (token) {
          
            case '}':
                return CURLY_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;
    }
 
    }
     
     
}