[解決済み】Javaで文字列が整数かどうか判断する【重複あり
2022-05-08 18:15:27
質問
<余談
文字列の配列の中の特定の項目が整数であるかどうかを判断しようとしています。
私は
.split(" ")
の中にある infix 式を使用します。
String
という形式にして、結果の配列を2つの配列に分割しようとしています。1つは整数用、もう1つは演算子用で、括弧やその他の雑多なものは破棄しています。これを実現する最善の方法は何でしょうか?
と思ったのですが
Integer.isInteger(String arg)
メソッドか何かで、そのようなことはありません。
解決方法は?
最も単純な方法は、文字列を繰り返し処理し、すべての要素が指定された基数に対して有効な数字であることを確認することです。これは、各要素を少なくとも一度は見なければならないので、可能な限り効率的な方法と言えます。基数に応じて最適化することも可能でしょうが、どう考えてもこの方法がベストでしょう。
public static boolean isInteger(String s) {
return isInteger(s,10);
}
public static boolean isInteger(String s, int radix) {
if(s.isEmpty()) return false;
for(int i = 0; i < s.length(); i++) {
if(i == 0 && s.charAt(i) == '-') {
if(s.length() == 1) return false;
else continue;
}
if(Character.digit(s.charAt(i),radix) < 0) return false;
}
return true;
}
あるいは、Java ライブラリに頼ることもできます。これは例外ベースではないので、思いつく限りのあらゆるエラー状態をキャッチすることができます。少しコストがかかりますが(Scannerオブジェクトを作成する必要があります。致命的にタイトなループではやりたくないでしょう)。しかし、一般的にはそれほど高くはないはずで、日常的な運用ではかなり信頼性が高いはずです。
public static boolean isInteger(String s, int radix) {
Scanner sc = new Scanner(s.trim());
if(!sc.hasNextInt(radix)) return false;
// we know it starts with a valid int, now make sure
// there's nothing left!
sc.nextInt(radix);
return !sc.hasNext();
}
ベストプラクティスはどうでもいいという方、コードレビューを担当する人をからかいたくなった方、ぜひ試してみてください。
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
} catch(NullPointerException e) {
return false;
}
// only got here if we didn't return false
return true;
}
関連
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み】JavaでStringが整数を表すかどうかを確認する最良の方法は何ですか?