在Java中计算字符串空间

时间:2015-11-27 11:44:35

标签: java string

问题很简单。

" abcd" .length()== 4

另外,打印时需要4个空格。

那么,这个怎么样?

"汉语" .length()== 2

但需要4个空格......

是否有任何库或方法来计算每种语言的空格? (我不想要一些图形方法......)

更新

实施例。单词"안녕abc" System.out.println()

占用7个空格
-------
안녕abc
String.length() : 5

2 个答案:

答案 0 :(得分:2)

您希望字符串的显示宽度以空格计算。

取决于字体。有时,对于亚洲脚本,会采用其他字体或字体大小。在某些字体中,空格也可能非常窄。 n - 宽度是用于比较的更常用的衡量标准。

public static double spaceWidth(Font font, String text) {
    FontRenderContext frc = new FontRenderContext(font.getTransform(), true, true);
    Rectangle2D textRect = font.getStringBounds(text, frc);
    Rectangle2D spaceRect = font.getStringBounds(" ", frc);
    return textRect.getWidth() / spaceRect.getWidth();
}  

public static void main(String[] args) {
    Font font = new Font("Monospaced", Font.PLAIN, 10);
    System.out.println("Font: " + font.getFamily());

    String s = "안녕abc";
    //         "      " (6 spaces)
    System.out.printf("'%s' -> %f%n", s, spaceWidth(font, s));
}
  

6.332791

一个Math.round会#34;#34;事情。如你所见,这不会给出精确的6个空格,即使字体是"等宽的"。

对于表格输出,最好使用带有TABLE等的HTML。

答案 1 :(得分:1)

假设你用空格表示字节数。

System.out.println( "漢語".getBytes().length ); // -> 6

其中String.length()返回字符序列(2)的长度。

打印字符所需的可测量空间取决于使用的字体。

使用Graphics对象,您可以使用字体指标计算:

g.setFont(new Font("SomeSuitableFont", Font.BOLD, 24));
int width = g.getFontMetrics().stringWidth("漢語");