Skip to content

Commit 6926ba0

Browse files
authored
Optimize S3Escaper.encode() (#1529)
1 parent 5a96d52 commit 6926ba0

File tree

1 file changed

+56
-18
lines changed

1 file changed

+56
-18
lines changed

api/src/main/java/io/minio/S3Escaper.java

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,62 @@ public static String encode(String str) {
2828
return "";
2929
}
3030

31-
return ESCAPER
32-
.escape(str)
33-
.replaceAll("\\!", "%21")
34-
.replaceAll("\\$", "%24")
35-
.replaceAll("\\&", "%26")
36-
.replaceAll("\\'", "%27")
37-
.replaceAll("\\(", "%28")
38-
.replaceAll("\\)", "%29")
39-
.replaceAll("\\*", "%2A")
40-
.replaceAll("\\+", "%2B")
41-
.replaceAll("\\,", "%2C")
42-
.replaceAll("\\/", "%2F")
43-
.replaceAll("\\:", "%3A")
44-
.replaceAll("\\;", "%3B")
45-
.replaceAll("\\=", "%3D")
46-
.replaceAll("\\@", "%40")
47-
.replaceAll("\\[", "%5B")
48-
.replaceAll("\\]", "%5D");
31+
StringBuilder builder = new StringBuilder();
32+
for (char ch : ESCAPER.escape(str).toCharArray()) {
33+
switch (ch) {
34+
case '!':
35+
builder.append("%21");
36+
break;
37+
case '$':
38+
builder.append("%24");
39+
break;
40+
case '&':
41+
builder.append("%26");
42+
break;
43+
case '\'':
44+
builder.append("%27");
45+
break;
46+
case '(':
47+
builder.append("%28");
48+
break;
49+
case ')':
50+
builder.append("%29");
51+
break;
52+
case '*':
53+
builder.append("%2A");
54+
break;
55+
case '+':
56+
builder.append("%2B");
57+
break;
58+
case ',':
59+
builder.append("%2C");
60+
break;
61+
case '/':
62+
builder.append("%2F");
63+
break;
64+
case ':':
65+
builder.append("%3A");
66+
break;
67+
case ';':
68+
builder.append("%3B");
69+
break;
70+
case '=':
71+
builder.append("%3D");
72+
break;
73+
case '@':
74+
builder.append("%40");
75+
break;
76+
case '[':
77+
builder.append("%5B");
78+
break;
79+
case ']':
80+
builder.append("%5D");
81+
break;
82+
default:
83+
builder.append(ch);
84+
}
85+
}
86+
return builder.toString();
4987
}
5088

5189
/** Returns S3 encoded string of given path where multiple '/' are trimmed. */

0 commit comments

Comments
 (0)