1

我正在处理来自不同国家和语言的文本。有大量使用“宽”格式字符的文本。它们表面上看起来像标准的 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}正则表达式中的术语来搜索这些字符。

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

4

1 回答 1

4

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

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

于 2013-01-24T03:24:47.867 回答