@@ -51,25 +51,26 @@ public List<String> render(final VariableSpec varspec,
5151
5252 private String doRender (final VariableSpec varspec , final String value )
5353 {
54- String ret = "" ;
54+ final StringBuilder sb = new StringBuilder ( value . length ()) ;
5555 if (named ) {
5656 // Note: variable names do not contain any character susceptible to
5757 // be percent encoded, so we leave them intact
58- ret += varspec .getName ();
58+ sb . append ( varspec .getName () );
5959 if (value .isEmpty ())
60- return ret + ifEmpty ;
61- ret += '=' ;
60+ return sb .append (ifEmpty ).toString ();
61+ //return ret + ifEmpty;
62+ sb .append ('=' );
6263 }
6364 // Account for a prefix, if any. Note: explode modifier is ignored.
64- final int len = value .codePointCount (0 , value .length ());
6565 final int prefixLen = varspec .getPrefixLength ();
66- final String val = prefixLen == -1 ? value
67- : nFirstCodePoints (value , Math .min (len , prefixLen ));
68- ret += pctEncode (val );
69- return ret ;
66+ if (prefixLen == -1 )
67+ return sb .append (pctEncode (value )).toString ();
68+ final int len = value .codePointCount (0 , value .length ());
69+ return len <= prefixLen ? sb .append (pctEncode (value )).toString ()
70+ :sb .append (pctEncode (nFirstChars (value , prefixLen ))).toString ();
7071 }
7172
72- private static String nFirstCodePoints (final String s , final int n )
73+ private static String nFirstChars (final String s , final int n )
7374 {
7475 int realIndex = n ;
7576 while (s .codePointCount (0 , realIndex ) != n )
0 commit comments