@@ -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