This is a revision of Adrian Larson's previous answer for benchmark comparison:
static Map<Integer, String> sec = new Map<Integer, String>{
65=>'A', 9398=>'A', 65313=>'A', 192=>'A', 193=>'A', 194=>'A', 7846=>'A', 7844=>'A', 7850=>'A', 7848=>'A', 195=>'A', 256=>'A', 258=>'A', 7856=>'A', 7854=>'A', 7860=>'A', 7858=>'A', 550=>'A', 480=>'A', 196=>'A', 478=>'A', 7842=>'A', 197=>'A', 506=>'A', 461=>'A', 512=>'A', 514=>'A', 7840=>'A', 7852=>'A', 7862=>'A', 7680=>'A', 260=>'A', 570=>'A', 11375=>'A', 42802=>'AA', 198=>'AE', 508=>'AE', 482=>'AE', 42804=>'AO', 42806=>'AU', 42808=>'AV', 42810=>'AV', 42812=>'AY', 66=>'B', 9399=>'B', 65314=>'B', 7682=>'B', 7684=>'B', 7686=>'B', 579=>'B', 386=>'B', 385=>'B', 67=>'C', 9400=>'C', 65315=>'C', 262=>'C', 264=>'C', 266=>'C', 268=>'C', 199=>'C', 7688=>'C', 391=>'C', 571=>'C', 42814=>'C', 68=>'D', 9401=>'D', 65316=>'D', 7690=>'D', 270=>'D', 7692=>'D', 7696=>'D', 7698=>'D', 7694=>'D', 272=>'D', 395=>'D', 394=>'D', 393=>'D', 42873=>'D', 497=>'DZ', 452=>'DZ', 498=>'Dz', 453=>'Dz', 69=>'E', 9402=>'E', 65317=>'E', 200=>'E', 201=>'E', 202=>'E', 7872=>'E', 7870=>'E', 7876=>'E', 7874=>'E', 7868=>'E', 274=>'E', 7700=>'E', 7702=>'E', 276=>'E', 278=>'E', 203=>'E', 7866=>'E', 282=>'E', 516=>'E', 518=>'E', 7864=>'E', 7878=>'E', 552=>'E', 7708=>'E', 280=>'E', 7704=>'E', 7706=>'E', 400=>'E', 398=>'E', 70=>'F', 9403=>'F', 65318=>'F', 7710=>'F', 401=>'F', 42875=>'F', 71=>'G', 9404=>'G', 65319=>'G', 500=>'G', 284=>'G', 7712=>'G', 286=>'G', 288=>'G', 486=>'G', 290=>'G', 484=>'G', 403=>'G', 42912=>'G', 42877=>'G', 42878=>'G', 72=>'H', 9405=>'H', 65320=>'H', 292=>'H', 7714=>'H', 7718=>'H', 542=>'H', 7716=>'H', 7720=>'H', 7722=>'H', 294=>'H', 11367=>'H', 11381=>'H', 42893=>'H', 73=>'I', 9406=>'I', 65321=>'I', 204=>'I', 205=>'I', 206=>'I', 296=>'I', 298=>'I', 300=>'I', 304=>'I', 207=>'I', 7726=>'I', 7880=>'I', 463=>'I', 520=>'I', 522=>'I', 7882=>'I', 302=>'I', 7724=>'I', 407=>'I', 74=>'J', 9407=>'J', 65322=>'J', 308=>'J', 584=>'J', 75=>'K', 9408=>'K', 65323=>'K', 7728=>'K', 488=>'K', 7730=>'K', 310=>'K', 7732=>'K', 408=>'K', 11369=>'K', 42816=>'K', 42818=>'K', 42820=>'K', 42914=>'K', 76=>'L', 9409=>'L', 65324=>'L', 319=>'L', 313=>'L', 317=>'L', 7734=>'L', 7736=>'L', 315=>'L', 7740=>'L', 7738=>'L', 321=>'L', 573=>'L', 11362=>'L', 11360=>'L', 42824=>'L', 42822=>'L', 42880=>'L', 455=>'LJ', 456=>'Lj', 77=>'M', 9410=>'M', 65325=>'M', 7742=>'M', 7744=>'M', 7746=>'M', 11374=>'M', 412=>'M', 78=>'N', 9411=>'N', 65326=>'N', 504=>'N', 323=>'N', 209=>'N', 7748=>'N', 327=>'N', 7750=>'N', 325=>'N', 7754=>'N', 7752=>'N', 544=>'N', 413=>'N', 42896=>'N', 42916=>'N', 458=>'NJ', 459=>'Nj', 79=>'O', 9412=>'O', 65327=>'O', 210=>'O', 211=>'O', 212=>'O', 7890=>'O', 7888=>'O', 7894=>'O', 7892=>'O', 213=>'O', 7756=>'O', 556=>'O', 7758=>'O', 332=>'O', 7760=>'O', 7762=>'O', 334=>'O', 558=>'O', 560=>'O', 214=>'O', 554=>'O', 7886=>'O', 336=>'O', 465=>'O', 524=>'O', 526=>'O', 416=>'O', 7900=>'O', 7898=>'O', 7904=>'O', 7902=>'O', 7906=>'O', 7884=>'O', 7896=>'O', 490=>'O', 492=>'O', 216=>'O', 510=>'O', 390=>'O', 415=>'O', 42826=>'O', 42828=>'O', 418=>'OI', 42830=>'OO', 546=>'OU', 80=>'P', 9413=>'P', 65328=>'P', 7764=>'P', 7766=>'P', 420=>'P', 11363=>'P', 42832=>'P', 42834=>'P', 42836=>'P', 81=>'Q', 9414=>'Q', 65329=>'Q', 42838=>'Q', 42840=>'Q', 586=>'Q', 82=>'R', 9415=>'R', 65330=>'R', 340=>'R', 7768=>'R', 344=>'R', 528=>'R', 530=>'R', 7770=>'R', 7772=>'R', 342=>'R', 7774=>'R', 588=>'R', 11364=>'R', 42842=>'R', 42918=>'R', 42882=>'R', 83=>'S', 9416=>'S', 65331=>'S', 7838=>'S', 346=>'S', 7780=>'S', 348=>'S', 7776=>'S', 352=>'S', 7782=>'S', 7778=>'S', 7784=>'S', 536=>'S', 350=>'S', 11390=>'S', 42920=>'S', 42884=>'S', 84=>'T', 9417=>'T', 65332=>'T', 7786=>'T', 356=>'T', 7788=>'T', 538=>'T', 354=>'T', 7792=>'T', 7790=>'T', 358=>'T', 428=>'T', 430=>'T', 574=>'T', 42886=>'T', 42792=>'TZ', 85=>'U', 9418=>'U', 65333=>'U', 217=>'U', 218=>'U', 219=>'U', 360=>'U', 7800=>'U', 362=>'U', 7802=>'U', 364=>'U', 220=>'U', 475=>'U', 471=>'U', 469=>'U', 473=>'U', 7910=>'U', 366=>'U', 368=>'U', 467=>'U', 532=>'U', 534=>'U', 431=>'U', 7914=>'U', 7912=>'U', 7918=>'U', 7916=>'U', 7920=>'U', 7908=>'U', 7794=>'U', 370=>'U', 7798=>'U', 7796=>'U', 580=>'U', 86=>'V', 9419=>'V', 65334=>'V', 7804=>'V', 7806=>'V', 434=>'V', 42846=>'V', 581=>'V', 42848=>'VY', 87=>'W', 9420=>'W', 65335=>'W', 7808=>'W', 7810=>'W', 372=>'W', 7814=>'W', 7812=>'W', 7816=>'W', 11378=>'W', 88=>'X', 9421=>'X', 65336=>'X', 7818=>'X', 7820=>'X', 89=>'Y', 9422=>'Y', 65337=>'Y', 7922=>'Y', 221=>'Y', 374=>'Y', 7928=>'Y', 562=>'Y', 7822=>'Y', 376=>'Y', 7926=>'Y', 7924=>'Y', 435=>'Y', 590=>'Y', 7934=>'Y', 90=>'Z', 9423=>'Z', 65338=>'Z', 377=>'Z', 7824=>'Z', 379=>'Z', 381=>'Z', 7826=>'Z', 7828=>'Z', 437=>'Z', 548=>'Z', 11391=>'Z', 11371=>'Z', 42850=>'Z', 97=>'a', 9424=>'a', 65345=>'a', 7834=>'a', 224=>'a', 225=>'a', 226=>'a', 7847=>'a', 7845=>'a', 7851=>'a', 7849=>'a', 227=>'a', 257=>'a', 259=>'a', 7857=>'a', 7855=>'a', 7861=>'a', 7859=>'a', 551=>'a', 481=>'a', 228=>'a', 479=>'a', 7843=>'a', 229=>'a', 507=>'a', 462=>'a', 513=>'a', 515=>'a', 7841=>'a', 7853=>'a', 7863=>'a', 7681=>'a', 261=>'a', 11365=>'a', 592=>'a', 42803=>'aa', 230=>'ae', 509=>'ae', 483=>'ae', 42805=>'ao', 42807=>'au', 42809=>'av', 42811=>'av', 42813=>'ay', 98=>'b', 9425=>'b', 65346=>'b', 7683=>'b', 7685=>'b', 7687=>'b', 384=>'b', 387=>'b', 595=>'b', 99=>'c', 9426=>'c', 65347=>'c', 263=>'c', 265=>'c', 267=>'c', 269=>'c', 231=>'c', 7689=>'c', 392=>'c', 572=>'c', 42815=>'c', 8580=>'c', 100=>'d', 9427=>'d', 65348=>'d', 7691=>'d', 271=>'d', 7693=>'d', 7697=>'d', 7699=>'d', 7695=>'d', 273=>'d', 396=>'d', 598=>'d', 599=>'d', 42874=>'d', 499=>'dz', 454=>'dz', 101=>'e', 9428=>'e', 65349=>'e', 232=>'e', 233=>'e', 234=>'e', 7873=>'e', 7871=>'e', 7877=>'e', 7875=>'e', 7869=>'e', 275=>'e', 7701=>'e', 7703=>'e', 277=>'e', 279=>'e', 235=>'e', 7867=>'e', 283=>'e', 517=>'e', 519=>'e', 7865=>'e', 7879=>'e', 553=>'e', 7709=>'e', 281=>'e', 7705=>'e', 7707=>'e', 583=>'e', 603=>'e', 477=>'e', 102=>'f', 9429=>'f', 65350=>'f', 7711=>'f', 402=>'f', 42876=>'f', 103=>'g', 9430=>'g', 65351=>'g', 501=>'g', 285=>'g', 7713=>'g', 287=>'g', 289=>'g', 487=>'g', 291=>'g', 485=>'g', 608=>'g', 42913=>'g', 7545=>'g', 42879=>'g', 104=>'h', 9431=>'h', 65352=>'h', 293=>'h', 7715=>'h', 7719=>'h', 543=>'h', 7717=>'h', 7721=>'h', 7723=>'h', 7830=>'h', 295=>'h', 11368=>'h', 11382=>'h', 613=>'h', 405=>'hv', 105=>'i', 9432=>'i', 65353=>'i', 236=>'i', 237=>'i', 238=>'i', 297=>'i', 299=>'i', 301=>'i', 239=>'i', 7727=>'i', 7881=>'i', 464=>'i', 521=>'i', 523=>'i', 7883=>'i', 303=>'i', 7725=>'i', 616=>'i', 305=>'i', 106=>'j', 9433=>'j', 65354=>'j', 309=>'j', 496=>'j', 585=>'j', 107=>'k', 9434=>'k', 65355=>'k', 7729=>'k', 489=>'k', 7731=>'k', 311=>'k', 7733=>'k', 409=>'k', 11370=>'k', 42817=>'k', 42819=>'k', 42821=>'k', 42915=>'k', 108=>'l', 9435=>'l', 65356=>'l', 320=>'l', 314=>'l', 318=>'l', 7735=>'l', 7737=>'l', 316=>'l', 7741=>'l', 7739=>'l', 383=>'l', 322=>'l', 410=>'l', 619=>'l', 11361=>'l', 42825=>'l', 42881=>'l', 42823=>'l', 457=>'lj', 109=>'m', 9436=>'m', 65357=>'m', 7743=>'m', 7745=>'m', 7747=>'m', 625=>'m', 623=>'m', 110=>'n', 9437=>'n', 65358=>'n', 505=>'n', 324=>'n', 241=>'n', 7749=>'n', 328=>'n', 7751=>'n', 326=>'n', 7755=>'n', 7753=>'n', 414=>'n', 626=>'n', 329=>'n', 42897=>'n', 42917=>'n', 460=>'nj', 111=>'o', 9438=>'o', 65359=>'o', 242=>'o', 243=>'o', 244=>'o', 7891=>'o', 7889=>'o', 7895=>'o', 7893=>'o', 245=>'o', 7757=>'o', 557=>'o', 7759=>'o', 333=>'o', 7761=>'o', 7763=>'o', 335=>'o', 559=>'o', 561=>'o', 246=>'o', 555=>'o', 7887=>'o', 337=>'o', 466=>'o', 525=>'o', 527=>'o', 417=>'o', 7901=>'o', 7899=>'o', 7905=>'o', 7903=>'o', 7907=>'o', 7885=>'o', 7897=>'o', 491=>'o', 493=>'o', 248=>'o', 511=>'o', 596=>'o', 42827=>'o', 42829=>'o', 629=>'o', 419=>'oi', 547=>'ou', 42831=>'oo', 112=>'p', 9439=>'p', 65360=>'p', 7765=>'p', 7767=>'p', 421=>'p', 7549=>'p', 42833=>'p', 42835=>'p', 42837=>'p', 113=>'q', 9440=>'q', 65361=>'q', 587=>'q', 42839=>'q', 42841=>'q', 114=>'r', 9441=>'r', 65362=>'r', 341=>'r', 7769=>'r', 345=>'r', 529=>'r', 531=>'r', 7771=>'r', 7773=>'r', 343=>'r', 7775=>'r', 589=>'r', 637=>'r', 42843=>'r', 42919=>'r', 42883=>'r', 115=>'s', 9442=>'s', 65363=>'s', 223=>'s', 347=>'s', 7781=>'s', 349=>'s', 7777=>'s', 353=>'s', 7783=>'s', 7779=>'s', 7785=>'s', 537=>'s', 351=>'s', 575=>'s', 42921=>'s', 42885=>'s', 7835=>'s', 116=>'t', 9443=>'t', 65364=>'t', 7787=>'t', 7831=>'t', 357=>'t', 7789=>'t', 539=>'t', 355=>'t', 7793=>'t', 7791=>'t', 359=>'t', 429=>'t', 648=>'t', 11366=>'t', 42887=>'t', 42793=>'tz', 117=>'u', 9444=>'u', 65365=>'u', 249=>'u', 250=>'u', 251=>'u', 361=>'u', 7801=>'u', 363=>'u', 7803=>'u', 365=>'u', 252=>'u', 476=>'u', 472=>'u', 470=>'u', 474=>'u', 7911=>'u', 367=>'u', 369=>'u', 468=>'u', 533=>'u', 535=>'u', 432=>'u', 7915=>'u', 7913=>'u', 7919=>'u', 7917=>'u', 7921=>'u', 7909=>'u', 7795=>'u', 371=>'u', 7799=>'u', 7797=>'u', 649=>'u', 118=>'v', 9445=>'v', 65366=>'v', 7805=>'v', 7807=>'v', 651=>'v', 42847=>'v', 652=>'v', 42849=>'vy', 119=>'w', 9446=>'w', 65367=>'w', 7809=>'w', 7811=>'w', 373=>'w', 7815=>'w', 7813=>'w', 7832=>'w', 7817=>'w', 11379=>'w', 120=>'x', 9447=>'x', 65368=>'x', 7819=>'x', 7821=>'x', 121=>'y', 9448=>'y', 65369=>'y', 7923=>'y', 253=>'y', 375=>'y', 7929=>'y', 563=>'y', 7823=>'y', 255=>'y', 7927=>'y', 7833=>'y', 7925=>'y', 436=>'y', 591=>'y', 7935=>'y', 122=>'z', 9449=>'z', 65370=>'z', 378=>'z', 7825=>'z', 380=>'z', 382=>'z', 7827=>'z', 7829=>'z', 438=>'z', 549=>'z', 576=>'z', 11372=>'z', 42851=>'z'
};
String removeDiacritics(String str) {
List<Integer> result = new List<Integer>();
for (Integer chr: str.getChars()) {
if (sec.containsKey(chr)) {
result.addAll(sec.get(chr).getChars());
} else {
result.add(chr);
}
}
return String.fromCharArray(result);
}
Apex. I'm working on theMapapproach but getting some compile issues. – Adrian Larson 10 hours ago