-1

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

4

3 回答 3

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));
        }
于 2012-06-18T16:32:21.653 回答
1

正如我在这里所说:

类似问题

使用正则表达式

String clean = str.replaceAll("\\P{Print}", "");

删除所有不可打印的字符。但这也包括 \n(换行)、\t(制表符)和 \r(回车),如果你想保留这些字符,请使用:

String clean = str.replaceAll("[^\\n\\r\\t\\p{Print}]", "");
于 2015-07-15T07:42:03.990 回答
0
String s = "WantedCharactersunwantedCharacters";

如果我希望剩余的字符串是“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();
}

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

于 2012-06-18T16:29:56.693 回答