private static String parseString(ListIterator<Character> chars) {
		StringBuilder ret = new StringBuilder();
		boolean isControlled = false;
		int hexValue = 0;
		int hexChar = -1;
		while (chars.hasNext()) {
			char cur = chars.next();
			if (hexChar >= 0) {
				try {
					hexValue <<= 4;
					hexValue |= Integer.parseInt(cur + "", 16);
				} catch (NumberFormatException ex) {
					return null;
				}
				if (++hexChar >= 4) {
					ret.append((char) hexValue);
					hexChar = -1;
					hexValue = 0;
				}
			} else if (isControlled) {
				isControlled = false;
				int ind;
				if (cur == 'u') {
					hexChar = 0;
				} else if ((ind = controls.indexOf(cur)) >= 0) {
					ret.append(controls.charAt(ind + 1));
				} else {
					return null;
				}
			} else {
				if (cur == '"')
					return ret.toString();
				else if (cur == '\\')
					isControlled = true;
				else
					ret.append(cur);
			}
		}
		return null;
	}