【问题标题】:Java cleaning up String values to remove unwanted charactersJava清理字符串值以删除不需要的字符
【发布时间】:2012-06-18 16:26:08
【问题描述】:

我有一个 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 中是否有类似的方法来执行相同的任务?

【问题讨论】:

标签: java


【解决方案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));
        }

【讨论】:

  • 请注意,您不必在 java 中的 char 和 int 之间进行转换;它们是可以互换的。
  • 是的,这是真的。我总是觉得演员的意图更清楚,但它可能很愚蠢(或者因为我在改变语言时没有改变习惯)。
【解决方案2】:

正如我在这里所说的:

Similar Question

使用正则表达式

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

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

String clean = str.replaceAll("[^\\n\\r\\t\\p{Print}]", "");

【讨论】:

    【解决方案3】:
    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();
    }
    

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

    【讨论】:

    • replaceAll 有很大的问题……它没有像预期的那样工作……“replaceAll("\\");"和类似的东西......
    猜你喜欢
    • 2016-06-29
    • 2011-12-24
    • 2021-01-13
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多