Cod sursa(job #1360506)

Utilizator devLucian93Lucian Alexandru devLucian93 Data 25 februarie 2015 15:45:15
Problema Convertor Scor 0
Compilator java Status done
Runda rosedu_cdl_2015 Marime 6.43 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.txt"));
        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_CLOSED){
                    writer.write(result);
                    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 ){
                    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) == COLON){
                token = reader.next().charAt(0);
                if(checkToken(token) == STRING ){
                 /*   reader.useDelimiter(stringRegex);
                    result = result + reader.next() + ",";  
            
                     
                    reader.useDelimiter(splitRegex);
                 */   
                    token = reader.next().charAt(0);
                    while(checkToken(token)!= STRING){
                    	result = result + token;
                    	token = reader.next().charAt(0);
                    }
                    result = result +",";
                     
                }
                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_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;
    }
 
    }
     
     
}