将Unicode宽字符更改为ASCII

时间:2013-01-24 03:09:53

标签: java regex unicode

我正在处理来自各种不同国家和语言的文本。有一些文本使用“宽”格式字符。它们看起来像标准的ASCII字符,但有一些不同的字体,并且周围有额外的空间。

目前,我循环遍历字符串的字符数组表示形式中的每个字符,测试该字符是否在宽字符范围内,如果是,则将其替换为ASCII等效字符,然后转换回字符串。

public static String wideToShortChars(String s) {
    char[] messagechars = s.toCharArray();
    for (int i = 0; i < messagechars.length; i++) {
        int thisChar = (int) messagechars[i];
        if (thisChar >= 65280 && thisChar <= 65519) {
            messagechars[i] = (char) (thisChar - 65248);
        }
    }
    return new String(messagechars);
}

这似乎很慢,我想使用RegEx会更快。我发现我可以使用正则表达式中的\p{InHalfwidth_and_Fullwidth_Forms}术语搜索这些字符。

我可以构建一个RegEx来搜索这些宽字符并用它们的ASCII /标准等价物替换它们吗?我只想用字母,数字和通常的标点符号来做这件事。

1 个答案:

答案 0 :(得分:4)

  

这似乎很慢,我想使用RegEx会更快。

我想你错了。编写良好的手动代码搜索/替换转换可能比实现正则表达式的等效转换更快。此外,我不认为用单个正则表达式进行这种转换是可能的。