Pagini recente » Rating Rosianu Radu (tobiasSpartanu89) | Diferente pentru utilizator/rolandpetrean intre reviziile 33 si 42 | bruh | Profil sstere | Cod sursa (job #1341330)
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("");
currentLine = new StringBuilder("");
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("");
}
else{
_print.println(currentLine);
currentLine = new StringBuilder("");
}
}
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("");
}
else{
_print.println(currentLine);
currentLine = new StringBuilder("");
}
}
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
}