[英]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.