package prophecy.common;
public class JSONMinify {
public static String minify(String jsonString) {
boolean in_string = false;
boolean in_multiline_comment = false;
boolean in_singleline_comment = false;
char string_opener = 'x'; // unused value, just something that makes compiler happy
StringBuilder out = new StringBuilder();
for (int i = 0; i < jsonString.length(); i++) {
// get next (c) and next-next character (cc)
char c = jsonString.charAt(i);
String cc = jsonString.substring(i, Math.min(i+2, jsonString.length()));
// big switch is by what mode we're in (in_string etc.)
if (in_string) {
if (c == string_opener) {
in_string = false;
out.append(c);
} else if (c == '\\') { // no special treatment needed for \\u, it just works like this too
out.append(cc);
++i;
} else
out.append(c);
} else if (in_singleline_comment) {
if (c == '\r' || c == '\n')
in_singleline_comment = false;
} else if (in_multiline_comment) {
if (cc.equals("*/")) {
in_multiline_comment = false;
++i;
}
} else {
// we're outside of the special modes, so look for mode openers (comment start, string start)
if (cc.equals("/*")) {
in_multiline_comment = true;
++i;
} else if (cc.equals("//")) {
in_singleline_comment = true;
++i;
} else if (c == '"' || c == '\'') {
in_string = true;
string_opener = c;
out.append(c);
} else if (!Character.isWhitespace(c))
out.append(c);
}
}
return out.toString();
}
}From http://jsonminify.tinybrain.de with greetings.
Travelled to 12 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
2 comment(s) hidden. show
| Snippet ID: | #727 |
| Snippet name: | JSONMinify.java - THE ORIGINAL (with package statement) |
| Eternal ID of this version: | #727/1 |
| Text MD5: | 3516d071e70d333f02d3ec6988827612 |
| Author: | stefan |
| Category: | |
| Type: | IOIOI |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2015-08-10 23:44:53 |
| Source code size: | 1775 bytes / 53 lines |
| Pitched / IR pitched: | No / Yes |
| Views / Downloads: | 1247 / 193 |
| Referenced in: | [show references] |