[英]Character.isDigit() error: no suitable method found for isDigit(String)
[英]What does Character.isDigit return?
我在网上找到了这个例子。 peek 包含使用readch(br)
从缓冲读取器读取的一个字符。 下一个循环必须继续,直到读取的字符是一个数字
while(Character.isDigit(peek)
&& !Character.isLetter(peek) && peek != '_') {
int n = (int) peek - 48;
sum = sum*10 + n;
readch(br);
}
仅仅说Character.isDigit
还不够吗?
是的,这是多余的。 如果字符类型(来自Character.getType
)是DECIMAL_DIGIT_NUMBER
,则Character.isDigit
返回 true ,如果相同类型是多个类别之一( DECIMAL_DIGIT_NUMBER
不是列出的类别之一),则Character.isLetter
返回 true 。
getType
返回单个值,因此根据 Java 不存在具有多种类型的字符。 因此,没有isDigit
和isLetter
都返回 true 的字符。 同样, _
是CONNECTOR_PUNCTUATION
(通过快速示例 Java 程序很容易看到这一点),它既不是数字也不是字母。
所以这是一个过度防御的人的代码。 isDigit
就足够了。
样本只完成了一半的工作。
它假定Character::isDigit
仅对字符 '0' 到 '9' 返回true
,但这是错误的。 这也意味着计算(int) peek - 48
不能可靠地得到数字的数值。
当代码应该真正适用于任何类型的数字时,它需要如下所示:
final var radix = 10;
var value = 0;
while( Character.isDigit( peek) && ((value = Character.digit( peek, radix )) != -1) )
{
sum = sum * radix + value;
readch( br );
}
要覆盖从 'A' 到 'F' 的十六进制数字或它们的小写等价物,只需删除Character::isDigit
检查(并相应地更改radix
)。
使用Character::getNumericValue
也可以获得罗马数字,但这对于sum
的计算将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.