Index: ISOLatin1AccentFilter.java =================================================================== --- ISOLatin1AccentFilter.java (revision 533514) +++ ISOLatin1AccentFilter.java (working copy) @@ -40,40 +40,59 @@ * To replace accented characters in a String by unaccented equivalents. */ public final static String removeAccents(String input) { - final StringBuffer output = new StringBuffer(); - for (int i = 0; i < input.length(); i++) { - switch (input.charAt(i)) { + boolean remove = false; + final int l = input.length(); + for (int i = 0; i < l; i++) { + final char c = input.charAt(i); + if ( c >= '\u00C0' && c <= '\u0178' ) { + remove = true; + break; + } + + } + if ( !remove ) { + return input; + } + final char[] cout = new char[l*2]; + int j = 0; + for (int i = 0; i < l; i++) { + final char c = input.charAt(i); + if (c < '\u00C0') { + cout[j++] = c; + } else { + switch (c) { case '\u00C0' : // À case '\u00C1' : // Á case '\u00C2' : //  case '\u00C3' : // à case '\u00C4' : // Ä case '\u00C5' : // Å - output.append("A"); + cout[j++] = 'A'; break; case '\u00C6' : // Æ - output.append("AE"); + cout[j++] = 'A'; + cout[j++] = 'E'; break; case '\u00C7' : // Ç - output.append("C"); + cout[j++] = 'C'; break; case '\u00C8' : // È case '\u00C9' : // É case '\u00CA' : // Ê case '\u00CB' : // Ë - output.append("E"); + cout[j++] = 'E'; break; case '\u00CC' : // Ì case '\u00CD' : // Í case '\u00CE' : // Î case '\u00CF' : // Ï - output.append("I"); + cout[j++] = 'I'; break; case '\u00D0' : // Ð - output.append("D"); + cout[j++] = 'D'; break; case '\u00D1' : // Ñ - output.append("N"); + cout[j++] = 'N'; break; case '\u00D2' : // Ò case '\u00D3' : // Ó @@ -81,23 +100,25 @@ case '\u00D5' : // Õ case '\u00D6' : // Ö case '\u00D8' : // Ø - output.append("O"); + cout[j++] = 'O'; break; case '\u0152' : // Œ - output.append("OE"); + cout[j++] = 'O'; + cout[j++] = 'E'; break; case '\u00DE' : // Þ - output.append("TH"); + cout[j++] = 'T'; + cout[j++] = 'H'; break; case '\u00D9' : // Ù case '\u00DA' : // Ú case '\u00DB' : // Û case '\u00DC' : // Ü - output.append("U"); + cout[j++] = 'U'; break; case '\u00DD' : // Ý case '\u0178' : // Ÿ - output.append("Y"); + cout[j++] = 'Y'; break; case '\u00E0' : // à case '\u00E1' : // á @@ -105,31 +126,32 @@ case '\u00E3' : // ã case '\u00E4' : // ä case '\u00E5' : // å - output.append("a"); + cout[j++] = 'a'; break; case '\u00E6' : // æ - output.append("ae"); + cout[j++] = 'a'; + cout[j++] = 'e'; break; case '\u00E7' : // ç - output.append("c"); + cout[j++] = 'c'; break; case '\u00E8' : // è case '\u00E9' : // é case '\u00EA' : // ê case '\u00EB' : // ë - output.append("e"); + cout[j++] = 'e'; break; case '\u00EC' : // ì case '\u00ED' : // í case '\u00EE' : // î case '\u00EF' : // ï - output.append("i"); + cout[j++] = 'i'; break; case '\u00F0' : // ð - output.append("d"); + cout[j++] = 'd'; break; case '\u00F1' : // ñ - output.append("n"); + cout[j++] = 'n'; break; case '\u00F2' : // ò case '\u00F3' : // ó @@ -137,32 +159,36 @@ case '\u00F5' : // õ case '\u00F6' : // ö case '\u00F8' : // ø - output.append("o"); + cout[j++] = 'o'; break; case '\u0153' : // œ - output.append("oe"); + cout[j++] = 'o'; + cout[j++] = 'e'; break; case '\u00DF' : // ß - output.append("ss"); + cout[j++] = 's'; + cout[j++] = 's'; break; case '\u00FE' : // þ - output.append("th"); + cout[j++] = 't'; + cout[j++] = 'h'; break; case '\u00F9' : // ù case '\u00FA' : // ú case '\u00FB' : // û case '\u00FC' : // ü - output.append("u"); + cout[j++] = 'u'; break; case '\u00FD' : // ý case '\u00FF' : // ÿ - output.append("y"); + cout[j++] = 'y'; break; default : - output.append(input.charAt(i)); + cout[j++] = c; break; + } } } - return output.toString(); + return new String(cout,0,j); } -} \ No newline at end of file +}