【问题标题】:printable char in javajava中的可打印字符
【发布时间】:2010-09-18 05:53:18
【问题描述】:

有谁知道如何在 java 中检测可打印字符?

过了一会儿(试验/错误)我得到了这个方法:

    public boolean isPrintableChar( char c ) {
        Character.UnicodeBlock block = Character.UnicodeBlock.of( c );
        return (!Character.isISOControl(c)) &&
                c != KeyEvent.CHAR_UNDEFINED &&
                block != null &&
                block != Character.UnicodeBlock.SPECIALS;
    }

我通过 KeyListener 获取输入,然后 Ctr-'key' 打印了一个正方形。有了这个功能似乎还算够用。

我在这里缺少一些字符吗?

【问题讨论】:

  • 我一直不明白为什么 Java 没有 Character.isPrintable() 方法。另一种技术是将 Character.getType(ch) 与所有可打印的 Unicode 字符类进行比较,这似乎仍然需要付出很多努力。
  • 你应该考虑一下,这个答案为我做了这个:stackoverflow.com/a/41100873/5285687

标签: java unicode non-printing-characters


【解决方案1】:

这似乎是“字体”独立的方式。

public boolean isPrintableChar( char c ) {
    Character.UnicodeBlock block = Character.UnicodeBlock.of( c );
    return (!Character.isISOControl(c)) &&
            c != KeyEvent.CHAR_UNDEFINED &&
            block != null &&
            block != Character.UnicodeBlock.SPECIALS;
}

【讨论】:

  • isISOControl 为换行符返回 true,这些字符肯定是可打印的。
【解决方案2】:

我不确定我是否理解您的问题。但是,如果您想检测是否可以将字符绘制到 Graphics 对象,并且如果不能打印一些占位符字符,您可能会发现它很有用:

Font.canDisplay(int)

它将检查字体是否可以显示特定的代码点(更多的是检查字体是否可显示——因为有些字符是可显示的——比如ą——但有些字体不能显示它们。

【讨论】:

  • 这也有效。谢谢你。我正在 jlabel 上打印键盘上写的所有字符。如果没有此验证 ^c ,“RETURN”“ESC”F1..F12 字符将显示为奇怪的小方块。两者(我的函数和你的方法)都正确过滤它们。我想我应该添加一些测试用例。
  • 好的,它适用于我键盘中的字符,但是在从 0 迭代到 Character.MAX_VALUE 后,有许多字符无法通过 Font.canDisplay() 围绕字符 384 显示。这取决于关于用户字体。两者都会起作用。谢谢
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 2017-12-06
  • 2011-09-06
相关资源
最近更新 更多