我正在处理来自各种不同国家和语言的文本。有一些文本使用“宽”格式字符。它们看起来像标准的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 /标准等价物替换它们吗?我只想用字母,数字和通常的标点符号来做这件事。
答案 0 :(得分:4)
这似乎很慢,我想使用RegEx会更快。
我想你错了。编写良好的手动代码搜索/替换转换可能比实现正则表达式的等效转换更快。此外,我不认为用单个正则表达式进行这种转换是可能的。