2013-01-24 36 views
1

我正在处理来自各种不同国家和语言的文本。有大量文本使用“宽”格式字符。它们表面上看起来像标准的ASCII字符,但有一些不同的字体,并且在它们周围有额外的空间。将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 /标准等价物替换它们吗?我只想用字母,数字和通常的标点符号来做到这一点。

回答

4

这看起来好像会很慢,我想它会更快使用RegEx。

你会错过我的想象。写得很好的手工代码搜索/替换转换可能比作为正则表达式实现的等效代码更快。此外,我不认为有可能用一个正则表达式来完成这种转换。

相关问题