私はそれについてたくさん検索しようとしましたが、具体的な解決策にはなりませんでした。任意の "文字列"入力から "数値"データ型を決定する方法
3つの数値入力が用意されているレストサービス(Jax-RSを使用)を開発中ですが、入力ごとに実際のデータ型はコンパイル時に不明です。例えば; 「num1」は、int、long、floatまたはdoubleなどの任意の数値で、同様に「num2」および「num3」とすることができます。
@GET
@Path("func/{num1}/{num2}/{num3}")
public String function (@PathParam("num1") String num1, @PathParam("num2") String num2, @PathParam("num3") String num3) {
// Determine the data type of "num1", "num2" and "num3"
// Perform any arithmetic operation on "num1", "num2" and "num3" and return the result;
}
どのように計算を実行するために各入力のデータタイプを決定できますか?
現在、次のコードのように一連のWrapper.parseXXXメソッドを使用して型をチェックしていますが、このアプローチは正しくないようです。
private Boolean isByte(String s) {
try {
Byte.parseByte(s);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isInt(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isLong(String s) {
try {
Long.parseLong(s);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isStrFloat(String str) {
try {
Float.parseFloat(str);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isStrDouble(String str) {
try {
Double.parseDouble(str);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
また、すべての入力にBigInteger/BigDecimalを使用する必要がありますか?
予想される数値形式でAPIを定義する必要があります。ユーザーがこれを逸脱した場合は、例外をキャッチする準備をしてください。誰かが間違った数値形式に加えてテキストを渡す可能性があることに留意してください。 –
org.apache.commons.lang3.math.NumberUtils.isParsableを使用する – Viraj
[もっと速い回答を得るために、どのような状況で私の質問に「緊急」や他の類似のフレーズを追加することができますか?](// meta.stackoverflow .com/q/326569) - これはボランティアに対処する理想的な方法ではなく、おそらく回答を得ることに逆効果があるということです。これをあなたの質問に追加しないでください。 – halfer