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

2022-08-31 10:40:41

我有字符串,其中我需要用空字符串替换像,和这样的字符。"A função""Ãugent"çãÃ

如何从字符串中删除这些非 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;
}

答案 1

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

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

答案 2

FailedDev的答案很好,但可以改进。如果要保留 ascii 等效项,则需要先规范化:

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

=> will produce "oau"

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