Pagini recente » Cod sursa (job #2463472) | Cod sursa (job #1432996) | Cod sursa (job #562907) | Cod sursa (job #2876214) | Cod sursa (job #1360497)
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 keysLine ="";
String result ="";
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);
// long start = System.nanoTime();
while( reader.hasNext() ){
while(keys){
if(checkToken(token) == CURLY_CLOSED){
writer.write(keysLine);
writer.println("");
writer.write(result);
writer.println("");
result="";
keys = false;
token = reader.next().charAt(0);
}
if(checkToken(token) == STRING ){
reader.useDelimiter(stringRegex);
if(reader.hasNext()){
keysLine = keysLine + 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) == STRING ){
reader.useDelimiter(stringRegex);
if(reader.hasNext()){
result = result + reader.next() + ",";
}
reader.useDelimiter(splitRegex);
token = reader.next().charAt(0);
}
if(checkToken(token) == NUMBER){
while(checkToken(token) == NUMBER){
result = result + token;
token = reader.next().charAt(0);
}
result = result + ",";
}
}
}
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);
}
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;
}
}
}