首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确打印unicode数学能力

如何正确打印unicode数学能力
EN

Stack Overflow用户
提问于 2022-04-21 22:21:55
回答 1查看 91关注 0票数 1

我想用unicode字符格式化一个提升到电源的数字。问题是,我必须首先解析一个包含^符号的字符串及其旁边的权力。

我知道,例如,如果我让x^2格式化,我基本上应该用System.out.println("x\u00B2")来打印x 2。

如果我得到像x^23这样的2位幂呢?

我有以下代码来格式化1位数的权限:

代码语言:javascript
复制
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9
 char[] unicodePowers = {'\u2070','\u00B9','\u00B2','\u00B3','\u2074',
            '\u2075','\u2076','\u2077','\u2078','\u2079'};
 String[] resultPowers = {"^0","^1","^2","^3","^4","^5","^6","^7","^8","^9"};

 for(int i = 0; i < unicodePowers.length; i++){
     expression = expression.replace(resultPowers[i],String.valueOf(unicodePowers[i]));
 }

我不太熟悉Unicode的格式化,所以我不知道是否有更好的方法来解决它。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-21 22:48:44

使用java.util.regex.Pattern,调用.matcher生成Matcher。这个匹配器可以通过运行我们通过的替换所有 函数来实现你的目标能力。

代码语言:javascript
复制
private static final Pattern EXPONENT_PATTERN = Pattern.compile("\\^(\\d+)");
private static final String NORMAL_LETTERS = "0123456789";
private static final String SUPERSCRIPT_LETTERS =
    "\u2070\u00B9\u00B2\u00B3\u2074\u2075\u2076\u2077\u2078\u2079";

public static String styled(String s) {
    return EXPONENT_PATTERN.matcher(s).replaceAll(mr -> {
        char[] chs = mr.group(1).toCharArray();
        for (int i = 0; i < chs.length; ++i) {
            int j = NORMAL_LETTERS.indexOf(chs[i]);
            if (j != -1) {
                chs[i] = SUPERSCRIPT_LETTERS.charAt(j);
            }
        }
        return new String(chs);
    });
}

对于字母你也可以搜索,https://unicode-table.com/en/blocks/phonetic-extensions/,但我不认为有很多上标数学运算符。

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

https://stackoverflow.com/questions/71961495

复制
相关文章

相似问题

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