序文
一部の地域内の数字は、多くの場合、文字列と転送を表すために使用されます。だから、どのように我々は、文字列が数字であるかどうかを判断するのですか?今日はこの話題を探ります。
ヌルヌル文字と
まず、我々は明確に知ることができるNULL文字""
とnull
確かにない数。実際には、我々は他のロジックと同じように記述します。最も極端な最も簡単な判別処理ロジックの一部が直接処理するための優先順位を決定します。これは小さなトリックです。
toCharArray
負前ケースストリングができtoCharArray()
char配列方式に変換します。そしてCharacter.isDigit(int)
、それはchar型の要素がデジタルであるかどうかを判断するのは簡単です(なぜchar型のint型を聞かないでください!)。そして、この方法では動作しませんか?私たちは、さまざまな状況を動作させるために波:
public class Main {
public static void main(String[] args) {
// false
System.out.println("\"\" 是不是数字: "+isNumeric(""));
// false
System.out.println("\" \" 是不是数字: "+isNumeric(" "));
// false
System.out.println("null 是不是数字: "+isNumeric(null));
// false
System.out.println("1,200 是不是数字: "+isNumeric("1,200"));
// true
System.out.println("1 是不是数字: "+isNumeric("1"));
// 预期是负数 却为 false
System.out.println("-1 是不是数字: "+isNumeric("-1"));
// true
System.out.println("200 是不是数字: "+isNumeric("200"));
// 预期是保留两位的浮点数 却为false
System.out.println("3000.00 是不是数字: "+isNumeric("3000.00"));
// 二进制
System.out.println("0b11001 是不是数字: "+isNumeric("0b11001"));
// 八进制 true
System.out.println("012 是不是数字: "+isNumeric("012"));
// 十六进制 false
System.out.println("0x12 是不是数字: "+isNumeric("0x12"));
// A-F 代表十六进制中的 10-15 false
System.out.println("0xAF 是不是数字: "+isNumeric("0xAF"));
// double false
System.out.println("12.12d 是不是数字: "+isNumeric("12.12d"));
// double 科学计数法 false
System.out.println("12E4 是不是数字: "+isNumeric("12E4"));
// float false
System.out.println("12.123f 是不是数字: "+isNumeric("12.123f"));
// 分隔符 jdk1.7 false
System.out.println("1_000_000 是不是数字: "+isNumeric("1_000_000"));
}
public static boolean isNumeric(final String str) {
// null or empty
if (str == null || str.length() == 0) {
return false;
}
return str.chars().allMatch(Character::isDigit);
}
}
复制代码
あまりにも多くの問題もなく上記、遵法、正の10進整数から見ることができます。浮動小数点小数、負、バイナリ、16進数、科学的表記法、一方のセパレータのケースと、この方法は便利ではありません。突然の包装考えると、いくつかの方法が用意されています。
パーズ
デジタルラッパークラスには、対応する持っているparse
方法を。文字列は、ルールの対応する数字の種類に準拠していない場合スローされますNumberFormatException
例外を。そこでここでは、方法についての我々の判断を変更します。
public static boolean isNumeric(final String str) {
// null or empty
if (str == null || str.length() == 0) {
return false;
}
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
try {
Double.parseDouble(str);
return true;
} catch (NumberFormatException ex) {
try {
Float.parseFloat(str);
return true;
} catch (NumberFormatException exx) {
return false;
}
}
}
}
复制代码
次に、以下の結果を、それを実行します。
"" 是不是数字: false
" " 是不是数字: false
null 是不是数字: false
1,200 是不是数字: false
1 是不是数字: true
-1 是不是数字: true
200 是不是数字: true
3000.00 是不是数字: true
0b11001 是不是数字: false
012 是不是数字: true
0x12 是不是数字: false
0xAF 是不是数字: false
12.12d 是不是数字: true
12E4 是不是数字: true
12.123f 是不是数字: true
1_000_000 是不是数字: false
复制代码
上記の5行目から開始し、すべてのJavaのデジタル表現がサポート。バイナリ、16進数に加えて、ビューの結果の観点から、他の区切り文字は予想と一致しています。が、この方法は完全ではありませんが、我々はまた、parseメソッドに対応する規則の一部から学びます。それが鍵となります。
サードパーティのライブラリ
そのAPIのJDKに提供していない銀の弾丸。だから、それを検出するために、サードパーティのライブラリはありますか?我々はコモンズ・lang3ライブラリ(バージョン3.9)を使用提供NumberUtils
処理、その私のためのツールをisParsable
、isDigits
、isCreatable
メソッドがテストされたisCreatable
方法が最も適していますが、分隔符
我々の期待を満たしていませんでした。あなたはこのような状況を考慮していない場合でなければなりませんisCreatable
基本的なニーズを満たすために。あなたは私が公共の数で使いやすいよ何を知っていれば他のライブラリにはわからない:Felordcnは私に言います。また、私の個人的なブログ駅を訪問する歓迎:felord.cn
正規表現
実際には、正規表現の使用は、問題に最適なソリューションです。
概要
今日では、いくつかの検証Javaの文字列によって、私たちは、デジタル変換し、どのように表現し、レビューするにはJAVAできるように、数値型です。私たちは、ルールのロットからいくつかを発見しました。私はこの記事はあなたが数字でJavaをより深い印象を持たせ、また、あなたの仕事を支援したいと考えています。
原作:脂肪の弟の小さな農業コードはアドレスを再現:gper.club/articles/7eを...