如何从字符串中删除非 ASCII 字符?

新手上路,请多包涵

I have strings "A função" , "Ãugent" in which I need to replace characters like ç , ã , and à 带有空字符串。

如何从我的字符串中删除那些非 ASCII 字符?

我试图使用以下函数来实现它,但它无法正常工作。一个问题是不需要的字符被空格字符取代。

 public static String matchAndReplaceNonEnglishChar(String tmpsrcdta) {
    String newsrcdta = null;
    char array[] = Arrays.stringToCharArray(tmpsrcdta);
    if (array == null)
        return newsrcdta;

    for (int i = 0; i < array.length; i++) {
        int nVal = (int) array[i];
        boolean bISO =
                // Is character ISO control
                Character.isISOControl(array[i]);
        boolean bIgnorable =
                // Is Ignorable identifier
                Character.isIdentifierIgnorable(array[i]);
        // Remove tab and other unwanted characters..
        if (nVal == 9 || bISO || bIgnorable)
            array[i] = ' ';
        else if (nVal > 255)
            array[i] = ' ';
    }
    newsrcdta = Arrays.charArrayToString(array);

    return newsrcdta;
}

原文由 rahulsri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 955
2 个回答

这将搜索并替换所有非 ASCII 字母:

 String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", "");

原文由 FailedDev 发布,翻译遵循 CC BY-SA 3.0 许可协议

FailedDev 的回答很好,但可以改进。如果你想保留 ascii 等价物,你需要先规范化:

 String subjectString = "öäü";
subjectString = Normalizer.normalize(subjectString, Normalizer.Form.NFD);
String resultString = subjectString.replaceAll("[^\\x00-\\x7F]", "");

=> will produce "oau"

这样,像“öäü”这样的字符将被映射到“oau”,这至少保留了一些信息。如果不进行规范化,生成的 String 将为空。

原文由 Michael Böckling 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题