将具有特殊unicode的文本转换为普通文本(java)

时间:2014-04-17 09:57:29

标签: java regex unicode

我有一个文本,其中包含许多unicode(?)字符,如下所示:

passaic $ 002c新款球衣 应该是:passaic,new jersey

Albert_W $ 002E_Barney 应该是:albert w。巴尼

Roosevelt_High_School_ $ $ 0028Yonkers $ 002C_New_York〇〇二九 应该是:Roosevelt_High_School_(Yonkers,_New_York)

我在网上搜索了这些字符的大清单:http://colemak.com/pub/mac/wordherd_source.txt

你知道我可以用原始字符替换这些字符的快速方法吗?请注意,我不想逐个替换每个字符(比如使用replaceAll。)而是我想使用已经实现了这个的函数(可能是外部库)

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

假设这些是UTF-16BE编码值,您可以使用解析值并转换为 char

  public static String parse(CharSequence csq) {
    StringBuilder out = new StringBuilder();
    Matcher matcher = Pattern.compile("\\$(\\p{XDigit}{4}+)").matcher(csq);
    int last = 0;
    while (matcher.find()) {
      out.append(csq.subSequence(last, matcher.start()));
      String hex = matcher.group(1);
      char ch = (char) Integer.parseInt(hex, 16);
      out.append(ch);
      last = matcher.end();
    }
    out.append(csq.subSequence(last, csq.length()));
    return out.toString();
  }