Tôi thích thay thế một bộ ký tự nhất định của một chuỗi bằng ký tự thay thế tương ứng theo cách hiệu quả.Làm thế nào để thay thế các ký tự trong một chuỗi java?
Ví dụ:
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";
String result = replaceChars("Gračišće", sourceCharacters , targetCharacters);
Assert.equals(result,"Gracisce") == true;
Có là cách hiệu quả hơn để sử dụng phương pháp replaceAll
của lớp String?
ý tưởng đầu tiên của tôi là:
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);
Bất kỳ ý tưởng?
Btw, các ký tự UTF-8 đang gây ra sự cố, với US_ASCII nó hoạt động tốt.
với giải pháp này tôi nhận được: GraA? IA¡Ae. và btw, tôi muốn thay thế không chỉ các ký tự dấu phụ mà còn thay thế một số ngôn ngữ khác. vì vậy tôi thực sự muốn biết một giải pháp hoạt động cho một bản đồ tùy ý. – ManBugra
Chính xác. Vấn đề là các dấu phụ đôi khi được kết hợp, đôi khi không, và chuỗi ký tự thay thế ký tự bị nhầm lẫn bởi vì có hai ký tự chứ không phải một ký tự. –
@Mr. Sáng bóng và mới: vâng, System.out.println ("š". ToCharArray(). Length); kết quả đầu ra '2' – ManBugra