Cod sursa(job #1345912)

Utilizator valentin_radValentin Radulescu valentin_rad Data 17 februarie 2015 22:08:51
Problema Convertor Scor 70
Compilator java Status done
Runda rosedu_cdl_2015 Marime 2.59 kb
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;

class Main {
  
  public static StringBuilder buffer = new StringBuilder();
  public static boolean parseKeyList = true;
  public static PrintWriter writer;

  public static void main(String[] args) throws FileNotFoundException {
    String line;
    writer = new PrintWriter("convertor.out");
    
    try (BufferedReader br = new BufferedReader(new FileReader("convertor.in"))) {
      while((line = br.readLine()) != null) {
        parseString(line);
      }
      br.close();
    } catch (Exception e) {
      System.out.println("Something went wrong!");
      System.out.println(e.toString());
    }
    
    writer.close();
  }
  
  public static void parseString(String line) {
    int objectStart, objectEnd;
    
    buffer.append(line);
    
    while(containsJsonObject(buffer)) {
      objectStart = buffer.indexOf("{");
      objectEnd = buffer.indexOf("}");
      parseObject(
        buffer.substring(objectStart + 1, objectEnd),
        parseKeyList
      );
      buffer.delete(0, objectEnd + 1);
      parseKeyList = false;
    }
  } 
  
  public static boolean containsJsonObject(StringBuilder str) {
    return (str.indexOf("{") != -1) && (str.indexOf("}") != -1);
  }
  
  public static void parseObject(String jsonObject, boolean parseKeyList) {
    char ch;
    
    // print out the csv header
    if(parseKeyList) {
      int keyEndQuote, keyStartQuote;
      
      for(int i = 0; i < jsonObject.length(); i++) {
        ch = jsonObject.charAt(i);
        
        if(ch == ':') {
          keyEndQuote = jsonObject.lastIndexOf('"', i);
          keyStartQuote = jsonObject.lastIndexOf('"', keyEndQuote - 1);
          writer.print(jsonObject.substring(keyStartQuote + 1, keyEndQuote).concat(","));
        }
      }
      writer.println();
    }
    
    // print our the csv data
    int pairComma;
            
    for(int i = 0; i < jsonObject.length(); i++) { 
      ch = jsonObject.charAt(i);
      
      if(ch == ':') {
        pairComma = jsonObject.indexOf(',', i);
        
        if(pairComma != -1) {
          writer.print(
              jsonObject.substring(i + 1, pairComma)
                        .trim()
                        .concat(",")
                        .replace("\"", "")
          );
        } else {
          writer.println(
              jsonObject.substring(i + 1, jsonObject.length())
                        .trim()
                        .concat(",")
                        .replace("\"", "")
              );
          break;
        }
      }
    }
  }
}