Java清理字符串值以删除不需要的字符

时间:2012-06-18 16:26:09

标签: java

我有一个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中执行相同的任务?

3 个答案:

答案 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)

正如我在这里所说:

Similar Question

使用正则表达式

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();
}

如果这是一个令人满意的解决方案