我将我的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
}
答案 0 :(得分:5)
尝试解析int并在异常失败时捕获异常:
String var1="5.5";
try {
qt += Integer.parseInt( var1);
}
catch (NumberFormatException nfe) {
// wasn't an int
}
答案 1 :(得分:3)
首先,您的if
条件肯定会失败,因为object
引用实际指向String对象。因此,它们不是任何integer
或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.parseInt
和Double.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.parseInt
和Double.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
}