in src/main/java/com/twitter/joauth/UrlCodec.java [110:162]
public static String normalize(String s) {
if (s == null) {
return null;
}
StringBuilder sb = null;
int length = s.length();
int i = 0;
while (i < length) {
char c = s.charAt(i);
if (c == '%' || c == '+' || c == ',' || c == '[' || c == ']') {
if (sb == null) {
sb = new StringBuilder(s.length() + 40); //use length
sb.append(s, 0, i);
}
if (c == '%') {
if (i + 3 <= length) {
if (ENCODED_UNDERSCORE.regionMatches(true, 1, s, i + 1, 2)) {
sb.append(UNDERSCORE);
} else if (ENCODED_DASH.regionMatches(true, 1, s, i + 1, 2)) {
sb.append(DASH);
} else if (ENCODED_TILDE.regionMatches(true, 1, s, i + 1, 2)) {
sb.append(TILDE);
} else if (ENCODED_PERIOD.regionMatches(true, 1, s, i + 1, 2)) {
sb.append(PERIOD);
} else {
for (int j = i; j < i + 3; j++) {
sb.append(Character.toUpperCase(s.charAt(j)));
}
}
i += 2;
} else {
sb.append(c);
}
} else if (c == ',') {
sb.append(ENCODED_COMMA);
} else if (c == '+') {
sb.append(ENCODED_PLUS);
} else if (c == '[') {
sb.append(ENCODED_OPEN_BRACKET);
} else if (c == ']') {
sb.append(ENCODED_CLOSE_BRACKET);
}
} else if (sb != null) {
sb.append(c);
}
i += 1;
}
return (sb == null) ? s : sb.toString();
}