文字列を解析する前に、それが数値であるかどうかをどのように確認しますか?
ベストアンサー1
これは通常、単純なユーザー定義関数 (つまり、独自の「isNumeric」関数) を使用して行われます。
何かのようなもの:
public static boolean isNumeric(String str) {
try {
Double.parseDouble(str);
return true;
} catch(NumberFormatException e){
return false;
}
}
ただし、この関数を頻繁に呼び出し、数値ではないために多くのチェックが失敗することが予想される場合は、失敗ごとに例外がスローされることに依存しているため、このメカニズムのパフォーマンスはそれほど高くありません。これは、かなりコストのかかる操作です。
別の方法としては、正規表現を使用して数値の有効性をチェックする方法があります。
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
ただし、上記の RegEx メカニズムには注意してください。アラビア数字以外の数字 (0 から 9 以外の数字) を使用すると失敗します。これは、RegEx の "\d" 部分が [0-9] にのみ一致し、事実上、国際的に数値を認識しないからです。(この点を指摘してくれた OregonGhost に感謝します!)
あるいは、Java の組み込み java.text.NumberFormat オブジェクトを使用して、文字列を解析した後、パーサーの位置が文字列の末尾にあるかどうかを確認することもできます。末尾にある場合は、文字列全体が数値であると想定できます。
public static boolean isNumeric(String str) {
ParsePosition pos = new ParsePosition(0);
NumberFormat.getInstance().parse(str, pos);
return str.length() == pos.getIndex();
}