如何在java中强制转换前检查Type

时间:2012-11-27 08:09:54

标签: java casting type-conversion typechecking

我将我的String变量转换为整数和双精度。我想检查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
}

6 个答案:

答案 0 :(得分:5)

尝试解析int并在异常失败时捕获异常:

String var1="5.5";

try {
 qt += Integer.parseInt( var1);
}    
catch (NumberFormatException nfe) {
// wasn't an int
}

答案 1 :(得分:3)

首先,您的if条件肯定会失败,因为object引用实际指向String对象。因此,它们不是任何integerdouble的实例。

要检查字符串是否可以转换为integerdouble,您可以按照@ 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是执行此操作的正确方法。这只是一种替代方法。

答案 2 :(得分: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+)?$");
  }

答案 3 :(得分: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

答案 4 :(得分:1)

Integer.parseIntDouble.parseDouble返回String的整数/双精度值。如果String不是有效数字,则该方法将抛出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
}

答案 5 :(得分:-1)

您还可以检查字符串是否包含点/点:

String var1="5.5";

if (var1.contains(".")){
// it should be a double
}else{
// int
}