如何正确打印unicode数学能力



我想使用unicode字符格式化一个数字。问题是,我必须首先解析包含^符号和它旁边的幂的字符串

我明白,如果,例如,我得到x^2来格式化它我基本上应该System.out.println("xu00B2")来打印x²

如果我得到一个2位数的幂,比如x^23呢?

我有以下代码来格式化1位数幂:

//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格式,所以我不知道是否有更好的方法来解决它。

谢谢!

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

private static final Pattern EXPONENT_PATTERN = Pattern.compile("\^(\d+)");
private static final String NORMAL_LETTERS = "0123456789";
private static final String SUPERSCRIPT_LETTERS =
"u2070u00B9u00B2u00B3u2074u2075u2076u2077u2078u2079";
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/然而,我不认为有很多上标数学运算符。

最新更新