2

String変数をintegerとdoubleにキャストしています。String変数に実行時に有効なInteger値またはDouble値が含まれているかどうかを確認したいと思います。

私はコードをフォローしていますが、うまくいきません。

String var1="5.5";
String var2="6";
Object o1=var1;
Object o2=var2;
if (o1 instanceof Integer)
{
    qt += Integer.parseInt( var1);// Qty
}
if (o2 instanceof Double)
{
    wt += Double.parseDouble(var2);// Wt
}
4

5 に答える 5

5

int を解析して、失敗した場合は例外をキャッチしてみてください。

String var1="5.5";

try {
 qt += Integer.parseInt( var1);
}    
catch (NumberFormatException nfe) {
// wasn't an int
}
于 2012-11-27T08:13:20.210 に答える
3

まず第一に、参照は実際には String オブジェクトを指しているifため、条件は確実に失敗します。objectしたがって、それらは anyintegerまたはのインスタンスではありませんdouble

integer文字列をまたはに変換できるかどうかを確認するにdoubleは、@Bedwyr の回答のアプローチに従うか、使用したくない場合はtry-catch、そこのコメントから推測します (実際、なぜあなたがしないのかわかりません'それらを使用したくない)、少し使用できますpattern matching: -

String str = "6.6";
String str2 = "6";

// If only digits are there, then it is integer
if (str2.matches("[+-]?\\d+")) {  
    int val = Integer.parseInt(str2);
    qt += val;
}

// digits followed by a `.` followed by digits
if (str.matches("[+-]?\\d+\\.\\d+")) {  
    double val = Double.parseDouble(str);
    wt += val;
}

しかし、それを理解し、これInteger.parseIntDouble.parseDouble行う正しい方法です。これは単なる代替アプローチです。

于 2012-11-27T08:24:33.797 に答える
3

パターンを使用して、文字列が整数かどうかを検出できます。

  Pattern pattern = Pattern.compile("^[-+]?\\d+(\\.\\d+)?$");
  Matcher matcher = pattern.matcher(var1);
  if (matcher.find()){
      // Your string is a number  
  } else {
      // Your string is not a number
  }

正しいパターンを見つける必要があります (私はしばらく使用していません)。または、誰かが私の回答を正しいパターンで編集することができます。

*編集** : パターンが見つかりました。コードを編集しました。私はそれをテストしませんでしたが、さらにエレガントなアプローチも提供する java2s サイトから取得しました (サイトからコピー):

 public static boolean isNumeric(String string) {
      return string.matches("^[-+]?\\d+(\\.\\d+)?$");
  }
于 2012-11-27T08:24:36.410 に答える
3

多分正規表現はあなたのニーズに合うかもしれません:

public static boolean isInteger(String s) {
    return s.matches("[-+]?[0-9]+");
}

public static boolean isDouble(String s) {
    return s.matches("[-+]?([0-9]+\\.([0-9]+)?|\\.[0-9]+)");
}

public static void main(String[] args) throws Exception {
    String s1 = "5.5";
    String s2 = "6";
    System.out.println(isInteger(s1));
    System.out.println(isDouble(s1));
    System.out.println(isInteger(s2));
    System.out.println(isDouble(s2));
}

版画:

false
true
true
false
于 2012-11-27T08:28:07.510 に答える
1

Integer.parseIntDouble.parseDoubleの整数/倍精度値を返しますStringStringが有効な数値でない場合、メソッドは をスローしNumberFormatExceptionます。

String var1 = "5.5";

try {
    int number = Integer.parseInt(var1); // Will fail, var1 has wrong format
    qt += number;
} catch (NumberFormatException e) {
    // Do your thing if the check fails
}

try {
    double number = Double.parseDouble(var1); // Will succeed
    wt += number;
} catch (NumberFormatException e) {
    // Do your thing if the check fails
}
于 2012-11-27T08:20:53.123 に答える