如何替换java String中的字符?
发布时间:2020-12-14 23:47:07 所属栏目:Java 来源:网络整理
导读:我喜欢以有效的方式用相应的替换字符替换字符串的某组字符. 例如: String sourceCharacters = "??????????";String targetCharacters = "sdccSDCCzZ";String result = replaceChars("Gra?i??e",sourceCharacters,targetCharacters );Assert.equals(result,"
|
我喜欢以有效的方式用相应的替换字符替换字符串的某组字符.
例如: String sourceCharacters = "??????????";
String targetCharacters = "sdccSDCCzZ";
String result = replaceChars("Gra?i??e",sourceCharacters,targetCharacters );
Assert.equals(result,"Gracisce") == true;
有没有比使用String类的replaceAll方法更有效的方法? 我的第一个想法是: 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);
有任何想法吗? 顺便说一句,UTF-8字符引起麻烦,US_ASCII可以正常工作. 解决方法
您可以使用
java.text.Normalizer和正则表达式来摆脱
diacritics,其中存在的远远超过您收集的数量.
这是一个SSCCE,在Java 6上复制’n’paste’n’run它: package com.stackoverflow.q2653739;
import java.text.Normalizer;
import java.text.Normalizer.Form;
public class Test {
public static void main(String... args) {
System.out.println(removeDiacriticalMarks("Gra?i??e"));
}
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string,Form.NFD)
.replaceAll("p{InCombiningDiacriticalMarks}+","");
}
}
这应该产生 Gracisce 至少,它在Eclipse中将控制台字符编码设置为UTF-8(Window> Preferences> General> Workspace> Text File Encoding).确保在您的环境中也设置了相同的设置. 作为替代方案,维护一个Map< Character,Character>: Map<Character,Character> charReplacementMap = new HashMap<Character,Character>();
charReplacementMap.put('?','s');
charReplacementMap.put('?','d');
// Put more here.
String originalString = "Gra?i??e";
StringBuilder builder = new StringBuilder();
for (char currentChar : originalString.toCharArray()) {
Character replacementChar = charReplacementMap.get(currentChar);
builder.append(replacementChar != null ? replacementChar : currentChar);
}
String newString = builder.toString();
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |








