我有一个XML文件,其中包含含有不需要的字符的值,例如
\xc2d
d\xa0
\xe7
\xc3\ufffdd
\xc3\ufffdd
\xc2\xa0
\xc3\xa7
\xa0\xa0
'619d813\xa03697'
\xe9.com
输入示例可能是
name : John Hinners\xc2d
email: abc@gmail\xe9.com
and others ....
期望的输出应该是
name : John Hinners
email: abc@gmail.com
and others ....
我来自python背景,可以轻松完成此任务
def remove_non_ascii(s):
return ''.join(i for i in s if ord(i)<128)
是否有类似的方法在Java中执行相同的任务?
答案 0 :(得分:1)
在java中它不会那么漂亮。
你可以使用正则表达式,但如果你没有对你的角色进行简单的定义,那么最好的可能就是这样做:
StringBuilder sb = new StringBuilder();
for (int i=0; i<s.length(); i++) {
if (((int)s.charAt(i))<128) sb.append(s.charAt(i));
}
答案 1 :(得分:1)
正如我在这里所说:
使用正则表达式
String clean = str.replaceAll("\\P{Print}", "");
删除所有不可打印的字符。 但是那还包括\ n(换行),\ t(制表符)和\ r \ n(回车),如果你想保留这些字符:
String clean = str.replaceAll("[^\\n\\r\\t\\p{Print}]", "");
答案 2 :(得分:0)
String s = "WantedCharactersunwantedCharacters";
如果我希望剩余的String为“WantedCharacters”,我只需写:
s = s.replaceAll("unwantedCharacters", "");
[编辑]: 当然,你也可以写
private static String removeNonAscii(String s){
StringBuffer sb = new StringBuffer();
for(int i=0; i<s.length(); ++i){
if(s.charAt(i) < 128){
sb.append(s.charAt(i));
}
}
return sb.toString();
}
如果这是一个令人满意的解决方案