Cod sursa(job #1341342)

Utilizator sorinos1357FMI Siman Marius Sorin sorinos1357 Data 12 februarie 2015 17:23:25
Problema Convertor Scor 0
Compilator java Status done
Runda rosedu_cdl_2015 Marime 4.12 kb
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;


public class Main {
	private Scanner _scan;
	private PrintWriter _print;
	
	
	public static void main(String[] args){
		new Main().convert();
		//System.out.println("Conversie reusita");
	}
	
	public Main(){
		try{
			_scan = new Scanner(new FileInputStream("convertor.in"));
			_print = new PrintWriter("convertor.out");
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	
	public void convert(){
		StringBuilder buffer,firstLine,currentLine;
		Expectation expected = Expectation.BRACKET_OPEN;
		boolean first = true;
		boolean openFile = true;
				
		firstLine = new StringBuilder(1050);
		currentLine = new StringBuilder(1050);
		expected = Expectation.BRACKET_OPEN;
		
		while(_scan.hasNextLine() && openFile){
			buffer = new StringBuilder(_scan.nextLine());
			
			for(int current = 0; current < buffer.length() ; ++current){
		
				switch(expected){
					case BRACKET_OPEN:{
						if(buffer.charAt(current) == '['){
							expected = Expectation.BRACE_OPEN;
						}
						break;
					}
					case BRACE_OPEN:{
						if(buffer.charAt(current) == '{'){
							expected = Expectation.KEY;
						}
						else{
							if(buffer.charAt(current) == ']'){
								openFile = false;
								current = buffer.length() + 2;
							}
						}
						break;
					}
					case KEY:{
						if(buffer.charAt(current) == '"'){
							expected = Expectation.KEY_END;
						}
						if(buffer.charAt(current) == '}'){
							expected = Expectation.BRACE_OPEN;
							if(first){
								first = false;
								_print.println(firstLine);
								_print.println(currentLine);
								currentLine = new StringBuilder(1050);
							}
							else{
								_print.println(currentLine);
								currentLine = new StringBuilder(1050);
							}
						}
						break;
					}
					case KEY_END:{
						if(first){
							if(buffer.charAt(current) == '"'){
								firstLine.append(',');
								expected = Expectation.COLON;
							}
							else{
								firstLine.append(buffer.charAt(current));
							}
						}
						else{
							if(buffer.charAt(current) == '"'){
								expected = Expectation.COLON;
							}
						}
						break;
					}
					case COLON:{
						if(buffer.charAt(current) == ':'){
							expected = Expectation.VALUE_START;
						}
						break;
					}
					case VALUE_START:{
						if(buffer.charAt(current) == '"'){
							expected = Expectation.VALUE_END_STRING;
						}
						else{
							if(isDigit(buffer.charAt(current))){
								expected = Expectation.VALUE_END_INT;
								currentLine.append(buffer.charAt(current));
							}
						}
						break;
					}
					case VALUE_END_STRING:{
						if(buffer.charAt(current) == '"'){
							currentLine.append(',');
							expected = Expectation.KEY;
						}
						else{
							currentLine.append(buffer.charAt(current));
						}
						break;
					}
					case VALUE_END_INT:{
						if(buffer.charAt(current) == ' ' || buffer.charAt(current) ==  ','){
							currentLine.append(',');
							expected = Expectation.KEY;
						}
						else{
							if(buffer.charAt(current) == '}'){
								currentLine.append(',');
								expected = Expectation.BRACE_OPEN;
								if(first){
									first = false;
									_print.println(firstLine);
									_print.println(currentLine);
									currentLine = new StringBuilder(1050);
								}
								else{
									_print.println(currentLine);
									currentLine = new StringBuilder(1050);
								}
							}
							else{
								currentLine.append(buffer.charAt(current));
							}
						}
						break;
					}
				} // switch
			} // for	
		} // while
		
		_scan.close();
		_print.close();
	} // convert
	
	
	public static boolean isDigit(char c){
		StringBuilder digits = new StringBuilder("0123456789");
		for(int i=0;i<digits.length();++i){
			if(c == digits.charAt(i)){
				return true;
			}
		}
		return false;
	}
}

enum Expectation{
	KEY , KEY_END , VALUE_START , VALUE_END_STRING , VALUE_END_INT , COLON , BRACE_OPEN , BRACKET_OPEN   
}