J'aime remplacer un certain ensemble de caractères d'une chaîne avec un caractère de remplacement correspondant d'une manière efficace.Comment remplacer des caractères dans une chaîne java?
Par exemple:
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";
String result = replaceChars("Gračišće", sourceCharacters , targetCharacters);
Assert.equals(result,"Gracisce") == true;
Est-ce qu'il ya beaucoup plus efficace que d'utiliser la méthode replaceAll
de la classe String?
Ma première idée était:
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);
Toutes les idées? Btw, les caractères UTF-8 causent le problème, avec US_ASCII cela fonctionne très bien.
avec cette solution je reçois: GraA? IA¡Ae. et btw, je voudrais remplacer non seulement les caractères diacritiques mais d'autres d'autres langues aussi. donc je voudrais vraiment savoir une solution qui fonctionne pour une cartographie arbitraire. – ManBugra
Exactement. Le problème est que les signes diacritiques sont parfois combinés, parfois non, et le remplacement caractère par caractère est confus car il y a en réalité deux caractères, pas un. –
@Mr. Brillant et nouveau: oui, System.out.println ("š" .toCharArray(). Length); sorties '2' – ManBugra