为了账号安全,请及时绑定邮箱和手机立即绑定

替换字符串中的非ASCII字符

/ 猿问

替换字符串中的非ASCII字符

萧十郎 2019-11-29 10:11:53

我有一个字符串 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 = Character.isISOControl(array[i]); // Is character ISO control

            boolean bIgnorable = Character.isIdentifierIgnorable(array[i]); // Is Ignorable identifier

            // 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;

    }

但是它不能正常工作..需要什么改进...这里我还有一个问题是,最终的字符串被空格字符代替,从而在字符串中创建了额外的空间。


查看完整描述

3 回答

?
繁星淼淼

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


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


查看完整回答
反对 回复 2019-11-29
?
慕码人2483693

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


String subjectString = "öäü";

subjectString = Normalizer.normalize(subjectString, Normalizer.Form.NFD);

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


=> will produce "oau"

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


查看完整回答
反对 回复 2019-11-29
?
素胚勾勒不出你

这将是Unicode解决方案


String s = "A função, Ãugent";

String r = s.replaceAll("\\P{InBasic_Latin}", "");

\p{InBasic_Latin}是一个包含以Unicode范围U + 0000..U + 007F的所有字母Unicode的块(参见regular-expression.info)


\P{InBasic_Latin} 被否定了 \p{InBasic_Latin}


查看完整回答
反对 回复 2019-11-29

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信