2

以下は、金額が整数でも浮動小数点数でもない場合に例外をスローする方法ですが、強制的に文字列を渡すと機能しません. true 以下の私の表現で何が間違っているか教えてください

private boolean isAmount(String amount) {
    boolean isValid = true;
    try {
        if (amount.matches("[-+]?[0-9]*\\.?[0-9]+"))  {
            return isValid;     
        }
    }
    catch (NumberFormatException e) {
        isValid = false;
    }
    return isValid;
}
4

3 に答える 3

3

あなたの正規表現は問題なく動作します。動作していないのはその周りのロジックです:

これはうまくいきます:

private boolean isAmount(String amount) {
  if(amount == null) return false;
  if (amount.matches("[-+]?[0-9]*\\.?[0-9]+")) return true;
  return false;
}

またはこのようなもの:

private boolean isAmount(String amount) {
  boolean ret = true;
  try {
    double val = Double.parseDouble(amount);
  } catch (NumberFormatException e) {
    ret = false;
  }
  return ret;
}
于 2013-05-06T08:47:04.483 に答える
3

どこにも変換しようとしていないので、例外はスローされません。これをするだけ...

private boolean isAmount(String amount) {
    return amount.matches("[-+]?[0-9]*\\.?[0-9]+"));
}
于 2013-05-06T08:46:21.473 に答える