在Android中订阅String

时间:2019-01-08 08:46:16

标签: java android

我想将下标替换为字符串,因为在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));
    }

但是它不能正常工作,没有将下标更改为字符串

1 个答案:

答案 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的不连续性。