Java:使用unicode overline显示平方根时的字符串长度?

时间:2011-10-09 15:09:05

标签: java unicode

在Java中,我创建了一个使用unicode和overline的字符串,因为我试图显示数字的平方根。我需要知道一些格式问题的字符串长度。在unicode中使用组合字符时,查找字符串长度的常用方法似乎失败,如下例所示。当随机数在平方根中时,任何人都可以帮我找到第二个字符串的长度,或者如何更好地进行平方根显示的提示吗?

    String s = "\u221A"+"12";
    String t = "\u221A"+"1"+"\u0305"+"2"+"\u0305";
    System.out.println(s);
    System.out.println(t);
    System.out.println(s.length());
    System.out.println(t.length());

感谢您的帮助,我使用谷歌找不到任何相关内容。

1 个答案:

答案 0 :(得分:7)

  

查找字符串长度的常用方法似乎失败

它们不会失败,报告字符串长度为Unicode字符数[*]。如果您需要其他行为,则需要明确定义“字符串长度”的含义。

如果您对用于显示目的的字符串长度感兴趣,那么通常您对计算像素(或其他逻辑/物理单位)感兴趣,并且这是显示层的责任(首先,您可能有不同的宽度)不同的字符,如果字体不是等宽字的。)

但是如果你只想计算graphemes“在特定书写系统的背景下最低限度的写作单位”)的数量,{{3}这是一个很好的代码和示例指南。复制 - 修剪 - 从那里粘贴相关代码,我们有类似的东西:

  public static int getGraphemeCount(String text) {
      int graphemeCount = 0;
      BreakIterator graphemeCounter = BreakIterator.getCharacterInstance();
      graphemeCounter.setText(text);
      while (graphemeCounter.next() != BreakIterator.DONE) 
          graphemeCount++;
      return graphemeCount;
  }

请记住:以上使用默认locale。一种更灵活,更健壮的方法,例如,接收显式locale作为参数并调用here而不是

[*]确切地说,正如评论中所指出的,String.length()计算 Java字符,它们实际上是UTF-16编码中的代码单元。这相当于只有当我们在BreakIterator.getCharacterInstance(locale)内时才计算Unicode字符。