提问人:Osama El-Ghonimy 提问时间:5/13/2023 更新时间:5/13/2023 访问量:87
为什么 KeyEvent getCharacter 返回字符串而不是字符
Why KeyEvent getCharacter returns a string not a character
问:
根据我的理解,应该返回一个类型的方法。getCharacter()
KeyEvent
char
例如,如果我必须检查键入的键是否为数字,我可以只使用 not .Character.isDigit(e.getCharacter())
Character.isDigit(e.getCharacter().charAt(0))
我还通过打印它总是返回来检查返回字符串的长度。此字符串的任何解释或其他用法?e.getCharacter().length()
1
答:
KeyEvent#getCharacter()
返回String
根据我的理解,KeyEvent 的 getCharacter() 方法应该返回一个 char 类型。
你从哪里得到这种理解?javafx.scene.input.KeyEvent#getCharacter()
的 Javadoc 表示该方法返回 String
对象引用,而不是原语。char
避免char
要知道,这是一个遗留类型,从 Java 2 开始基本上就被破坏了,从 Java 5 开始就被遗留了。作为 16 位值,a 在物理上无法表示 Unicode 中定义的 149,186 个字符中的大多数。char
char
代码点
请改用代码点整数来处理单个字符。
int[] codePoints = myKeyEvent.getCharacter().codePoints().toArray() ;
然后,您可以询问这些代码点中的任何一个是否表示数字。
boolean isDigit = Character.isDigit( myCodePoint ) ;
示例代码
String input = "A1😷"; // FACE WITH MEDICAL MASK is hex 1F637, decimal 128,567.
System.out.println( "input.length(): " + input.length() ) ;
System.out.println( "Count code points: " + input.codePoints().count() + "\n" ) ;
input.codePoints ( ).forEach (
( int codePoint ) ->
{
System.out.println (
"Code point: " + codePoint +
" | name: " + Character.getName ( codePoint ) +
" | digit: " + Character.isDigit ( codePoint ) +
" | = " + Character.toString ( codePoint ) +
"\n- - - - - - - - - - - - - - - - - - - - "
);
}
);
input.length(): 4
Count code points: 3
Code point: 65 | name: LATIN CAPITAL LETTER A | digit: false | = A
- - - - - - - - - - - - - - - - - - - -
Code point: 49 | name: DIGIT ONE | digit: true | = 1
- - - - - - - - - - - - - - - - - - - -
Code point: 128567 | name: FACE WITH MEDICAL MASK | digit: false | = 😷
- - - - - - - - - - - - - - - - - - - -
你说:
我可以只使用Character.isDigit(e.getCharacter())
不可以。该方法采用传统或现代代码点。该方法不返回任何一个;如上所述,该方法返回 a。isDigit
char
int
getCharacter
String
有关背景信息,请参阅Joel Spolsky撰写的令人惊讶的有趣文章:The Absolute Minimum Every Software Developer Absolutely, Positive Must Know About Unicode and Characters Sets (No Excuses!)。
评论
KeyEvent#getCharacter()
char
char
String
Character.isDigit(e.getCharacter())
charAt(0)
char
String
char
char
String
评论
char
char
char
TextFormatter
aTextField.textProperty().length()
IntegerBinding
aLabel.textProperty().bind(aTextField.textProperty().length().asString())