首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Java规范Unicode数字

如何用Java规范Unicode数字
EN

Stack Overflow用户
提问于 2014-09-04 05:16:43
回答 3查看 392关注 0票数 4

是否有任何Java将Unicode数字规范化为ASCII数字?

JDKICU4J中有一个规范化API,它似乎无法处理这种规范化(因为Unicode标准可能不称之为规范化)

我需要的是将所有形式的Unicode数字(列在这个职位上)转换为0-9。一个可能的混乱解决方案是10替换-所有的任何数字从0到9。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-06 07:46:51

更新

这是可以使用ICU4J音译API的。以下音译从字符串中移除除and、and、0-9和破折号(减号)以外的任何非ASCII字符.

代码语言:javascript
复制
Transliterator trans = Transliterator.getInstance("Any-Latin; NFD; [^a-zA-Z0-9-] Remove");
System.out.println(trans.transform("۱۲۳456"));

将印刷:

代码语言:javascript
复制
123456

另一个混乱的解决方案

代码语言:javascript
复制
static final Pattern DIGIT_0 = Pattern.compile("[٠۰߀०০੦૦୦௦౦೦൦๐໐0]");
static final Pattern DIGIT_1 = Pattern.compile("[١۱߁१১੧૧୧௧౧೧൧๑໑1]");
static final Pattern DIGIT_2 = Pattern.compile("[٢۲߂२২੨૨୨௨౨೨൨๒໒2]");
static final Pattern DIGIT_3 = Pattern.compile("[٣۳߃३৩੩૩୩௩౩೩൩๓໓3]");
static final Pattern DIGIT_4 = Pattern.compile("[٤۴߄४৪੪૪୪௪౪೪൪๔໔4]");
static final Pattern DIGIT_5 = Pattern.compile("[٥۵߅५৫੫૫୫௫౫೫൫๕໕5]");
static final Pattern DIGIT_6 = Pattern.compile("[٦۶߆६৬੬૬୬௬౬೬൬๖໖6]");
static final Pattern DIGIT_7 = Pattern.compile("[٧۷߇७৭੭૭୭௭౭೭൭๗໗7]");
static final Pattern DIGIT_8 = Pattern.compile("[٨۸߈८৮੮૮୮௮౮೮൮๘໘8]");
static final Pattern DIGIT_9 = Pattern.compile("[٩۹߉९৯੯૯୯௯౯೯൯๙໙9��]");

public static final Pattern[] DIGIT_PATTERN_LIST = { DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7, DIGIT_8,
        DIGIT_9 };

/**
 * Converts any Unicode digits into their ASCII equivalent. For example given 23۹٤۴ returns 23944
 * 
 * @param str
 * @return
 */
public static String normalizeUnicodeDigits(String str) {
    for (int i = 0; i < DIGIT_PATTERN_LIST.length; i++) {
        Pattern dp = DIGIT_PATTERN_LIST[i];
        str = dp.matcher(str).replaceAll(String.valueOf(i));
    }
    return str;
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-20 10:20:15

Character.forDigit(...)Character.digit(...)的结合应该是可行的。

代码语言:javascript
复制
public static char normalizeDigit(char c) {
  int d = Character.digit(c, 10);
  return (d >= 0) ? Character.forDigit(d, 10): c;
}

遍历所有字符。

票数 1
EN

Stack Overflow用户

发布于 2018-02-14 19:09:47

你想要做的事情叫做音译

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25657747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档