使用java从html代码和重音清除字符串

时间:2013-12-08 03:04:02

标签: java regex string diacritics non-ascii-characters

我需要从重音符和html口音代码中清除一个html字符串,当然我发现有很多代码可以执行此操作,但是,似乎没有一个代码可以用于我需要清理的文件。

此文件包含Postulación Ayudantías以及GestiónÁrbol

等字词

我发现很多代码用text.normalize和regex用来清理字符串,它适用于短字符串,但是我使用很长的字符串,那些使用短字符串的代码不能用于长串

我真的迷失在这里,我需要帮助!

这是我尝试过但没有工作的代码

Easy way to remove UTF-8 accents from a string?(对于字符串中的每个重音都返回“?”)

我使用正则表达式来删除html重音代码,但两者都不起作用:

string=string.replaceAll("á","a");
string=string.replaceAll("é","e");
string=string.replaceAll("í","i");
string=string.replaceAll("ó","o");
string=string.replaceAll("ú","u");
string=string.replaceAll("ñ","n");     

编辑:nvm,replaceAll正在工作,我写错了(“/á而不是”á)

任何帮助或想法?

2 个答案:

答案 0 :(得分:1)

我认为有几种选择可行。我先建议你 使用StringEscapeUtils.unescapeHtml4(String)来取消你的html实体(即将它们转换为普通的Java“utf-8”形式)。 然后,您可以使用ASCIIFoldingFilter过滤到“ASCII”等效项。

答案 1 :(得分:0)

您需要区分是否要讨论包含标签等的整个HTML文档,或者仅仅是包含HTML编码数据的字符串。

如果您正在使用整个HTML文档,比如通过获取网页返回的内容,那么解决方案实际上不仅适用于堆栈溢出答案,因为您基本上需要HTML解析器来导航数据

但是,如果您只是处理HTML编码的字符串,那么您首先需要解码它。有很多实用程序可以这样做,例如Apache Commons Lang库StringEscapeUtils类。有关示例,请参阅this question

一旦你解码了字符串,你需要逐个字符地迭代它并替换任何不需要的东西。您当前的方法不适用于十六进制编码的项目,并且您最终将需要构建一个覆盖all the possible HTML entities的巨大表格。