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

标签 java unicode

在 Java 中,我创建了一个使用 unicode 和上划线的字符串,因为我试图显示数字的平方根。我需要知道某些格式问题的字符串长度。在 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());

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

最佳答案

the usual methods for finding string length seem to fail

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

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

但是如果你只是想计算 graphemes 的数量(“在特定书写系统的上下文中最小的独特书写单元”),here这是一个很好的指南,包含代码和示例。从那里复制-修剪-粘贴相关代码,我们会得到这样的东西:

  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 作为参数并调用 BreakIterator.getCharacterInstance(locale)相反

[*] 准确地说,正如评论中指出的那样,String.length() 计算 Java 字符,它们实际上是 UTF 中的代码单元- 16位编码。这相当于仅当我们在 BMP 中时才计算 Unicode 字符。 .

关于Java:使用unicode上划线显示平方根时字符串的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704426/

相关文章:

java - 如何使用 drools-spring 在 drools 中设置全局变量并在 DRL 文件中使用相同的变量

java - Android 我们如何将 emoji Unicode 转换为 ios Emoji 作弊代码并返回到 unicode

windows - 在 Windows 上递归更改文件编码?

java - 如何使用 JNI 将终端输出从 C 程序重定向到 System.out?

java - Eclipse 和虚拟机中的 Tomcat 服务器

java - 添加 View 后无法刷新布局(仅发生在 CustomAdapter 中)

Java表情符号转换为xml : what libraries exist?

java - 如何检查字节数组是否包含 Java 中的 Unicode 字符串?

c# - Unicode 到 Mazovia 编码冗余字符

java - 通过类扩展和返回值