当前位置: 首页 > 面试题库 >

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

胡霖
2023-03-14
问题内容

在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());

感谢您的任何帮助,我无法使用Google在此上找到任何东西。


问题答案:

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

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

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

但是,如果你只是有兴趣在计数的数量字形(
“在特定的书写系统的情况下写的最小单位鲜明”
),这里是个不错的指南与代码及实例。从那里复制-修剪-
粘贴相关代码,我们将得到以下内容:


  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字符。



 类似资料:
  • 问题内容: 我正在努力获取unicode字符串的计数,并尝试了各种选择。看起来像是一个小问题,但却大有作为。 在这里,我试图获取字符串str1的长度。我得到的是6。但实际上是3。将光标移到字符串“குமார்”上还会显示为3个字符。 基本上我想测量长度并打印每个字符。如“கு”,“மா”,“ர்”。 PS:这是泰米尔语。 问题答案: 找到了解决您问题的方法。 基于这个SO答案,我制作了一个使用正则

  • 我正在努力获取unicode字符串的计数,并尝试了各种选项。看起来是个小问题,但影响很大。 这里我试图得到字符串str1的长度。我得到的是6分。但实际上是3。将光标移到字符串上“குமார்“也显示为3个字符。 基本上我想测量长度并打印每个字符。像 "கு", "மா", "ர்" . 附言:这是泰米尔语。

  • 我刚启动JavaFx,有点拘泥于TableView,它显示了每个列的非常长的字符串表示,如: 而我预计细胞中只会出现“大”、“5000”、“3000”。 这是我的模型: fxml: 最后是控制器: 看起来控制器很好,它能够从数据库中获取值并向TableView添加行,但为什么TableView显示属性对象的字符串表示,而不仅仅是显示值? 非常感谢!

  • 问题内容: 我必须将印地文文本存储在MySQL数据库中,使用PHP脚本获取它并将其显示在网页上。我做了以下事情: 我创建了一个数据库,并将其编码设置为UTF-8,并将排序规则设置为。我在表中添加了一个varchar字段,并将其设置为在charset属性中接受UTF-8文本。 然后我开始向其中添加数据。在这里,我不得不从现有站点复制数据。印地文文本看起来像这样:सूर्योदय:05:30 我直接将

  • 我正在尝试使用raylib显示包含西里尔字符的字符串。所以我加载了一个代码点如下的字体: 如果我画