替换String中的特殊字符

时间:2013-11-18 17:26:08

标签: java string

使用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!!");
}

它进入了......我确定问题是替换角色......有人可以帮助我吗?

提前多多感谢

2 个答案:

答案 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}", "");