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

替换字符串中的非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 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

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


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


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

TA贡献1860条经验 获得超9个赞

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


String subjectString = "öäü";

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

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


=> will produce "oau"

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


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 803 浏览

添加回答

举报

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