使用replaceAll方法替换特殊字符时发现问题。
我有这段代码:
public static String replaceSpecialCharacters(String cadena) {
cadena = cadena.replaceAll("[âãáàä]", "a");
cadena = cadena.replaceAll("[ÂÃÁÀÄ]", "A");
cadena = cadena.replaceAll("[éèêë]", "e");
cadena = cadena.replaceAll("[ÉÈÊË]", "E");
cadena = cadena.trim();
return cadena;
}
当像“Álamont”fot实例这样的字符串出现时,该方法返回字符串“Alamont”,但是在替换中返回的字符串与“Alamont”不同,首先如果我看到字符串的count属性它说“8”而不是“7”....如果我要做的话:
if (cadena.equalsIgnoreCase("Alamont")) {
System.out.println("i've got ya!!");
}
它进入了......我确定问题是替换角色......有人可以帮助我吗?
提前多多感谢
答案 0 :(得分:0)
这听起来很奇怪,因为您的输入值正在使用combining characters。这没有什么不对,但你应该期望String长度改变。
有一些方法可以规范你的字符串以使用字符的非组合版本......但是我忘了......它就是,Normalization tutorial ...该链接导致我的浏览器(firefox) ,即它效果更好)减速,但这是真正的联系!...也许Normalizer JavaDoc就够了
答案 1 :(得分:0)
你应该清理你的问题。目前尚不清楚,你的意思是“该方法返回正确的字符串”Alamont“,但是在替换中返回的这个字符串与”Alamont“不一样”,并且不清楚为什么你如果您使用String
或为什么期望trim
等于"Alamont"
,则返回的"atico"
可能会有不同的长度。
然而,删除String
中的重音符号和其他变音符号比执行几十次替换操作更容易,并且有可能忘记一个:
import java.text.Normalizer;
…
s=Normalizer.normalize(s, Normalizer.Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}", "");