Chciałbym zastąpić pewien zestaw znaków ciągu z odpowiednią postacią zastępczą w skuteczny sposób.Jak zamienić znaki w łańcuchu java?
Na przykład:
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";
String result = replaceChars("Gračišće", sourceCharacters , targetCharacters);
Assert.equals(result,"Gracisce") == true;
Czy istnieje bardziej efektywny sposób niż użycie metody klasy String replaceAll
?
Moja pierwsza myśl była:
final String s = "Gračišće";
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";
// preparation
final char[] sourceString = s.toCharArray();
final char result[] = new char[sourceString.length];
final char[] targetCharactersArray = targetCharacters.toCharArray();
// main work
for(int i=0,l=sourceString.length;i<l;++i)
{
final int pos = sourceCharacters.indexOf(sourceString[i]);
result[i] = pos!=-1 ? targetCharactersArray[pos] : sourceString[i];
}
// result
String resultString = new String(result);
Jakieś pomysły?
Przy okazji, znaki UTF-8 powodują problem, z US_ASCII działa dobrze.
z tym rozwiązaniem otrzymuję: GraA? IAAAA. i btw, chciałbym wymienić nie tylko znaki diakrytyczne, ale także inne języki w innych językach. więc naprawdę chciałbym poznać rozwiązanie, które działa na dowolne mapowanie. – ManBugra
Dokładnie. Problem polega na tym, że znaki diakrytyczne są czasami łączone, czasami nie, a ciąg znaków zastępuje znak po znaku, ponieważ są w rzeczywistości dwa znaki, a nie jeden. –
@Mr. Shiny and New: yes, System.out.println ("š" .toCharArray(). Length); wyjścia "2" – ManBugra