我想将下标替换为字符串,因为在Android设备上,用户可以将此值设置为EditText
,或者我想禁用显示下标char的功能。我想将Subscript替换为字符串,我这样做是:
public static String fromSubscript(String value) {
char[] Symbols = new char[] {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', '?', // <- '?' unknown/not standard symbols
'a', 'e', 'o', 'x', '\u0259', 'h', 'k', 'l', 'm', 'n', 'p', 's', 't', '?', '?', '?' }; // <- u0259 - small latin shwa
StringBuilder result = new StringBuilder(value.length());
for(int i =0; i<value.length();i++){
char ch = value.charAt(i);
int v = (int)ch;
if ((v >= 0x2080) && (v <= 0x209F))
result.append(Symbols[v - 0x2080]);
else
result.append(ch);
}
return result.toString();
}
public static void main(String[] args) {
String a = "\u00B9";
System.out.println(a);
System.out.println(fromSubscript(a));
}
但是它不能正常工作,没有将下标更改为字符串
答案 0 :(得分:0)
代码没有问题,但是您的测试用例选择了错误的代码。在您的代码中:
if ((v >= 0x2080) && (v <= 0x209F))
然后,您应该在此范围内进行测试,例如:
String a = "\u2082";
效果很好:
$ java Test
₂
2
但是,我认为在Unicode数据库的帮助下,也许有一种更通用的方法。
更新:原始问题中的\u00B9
是超级脚本“¹”,而不是 sub 脚本“₁”(U +2081)。
超级脚本写在字符的顶部, sub 脚本写在字符的底部。您的代码可以很好地转换 sub 脚本,但是您使用 super 脚本进行了测试,哈哈。
更新2:对于超级脚本,数字的代码点为:
'\u2070', '\u00B9', '\u00B2', '\u00B3', '\u2074', '\u2075', '\u2076', '\u2077', '\u2078', '\u2079'
请注意 super 脚本1 2和3的不连续性。