2

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

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

要检查字符串是否可以转换为integeror 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.parseInt并且Double.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返回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
}
于 2012-11-27T08:20:53.123 回答