如何使用Java编程语言实现VB的Val()函数,或者是否有任何具有相同方法的API?
答案 0 :(得分:7)
您应该使用Integer.parseInt
,Float.parseFloat
,Double.parseDouble
等 - 或者使用NumberFormat
,具体取决于您是否希望以文化敏感的方式处理输入或不
编辑:请注意,这些期望字符串包含数字而不包含任何其他内容。如果您希望能够解析可能以数字开头然后包含其他位的字符串,则需要先清理字符串,例如使用正则表达式。
答案 1 :(得分:4)
如果我的Google技能为我服务,Val()
会将字符串转换为数字;那是对的吗?
如果是这样,Integer.parseInt(myString)
或Double.parseDouble(myString)
是最接近的Java等价物。但是,任何无效字符都会导致它们将整个字符串视为无效;你不能用他们的地址解析街道号码。
编辑:这是一个更接近等效的方法:
public static double val(String str) {
StringBuilder validStr = new StringBuilder();
boolean seenDot = false; // when this is true, dots are not allowed
boolean seenDigit = false; // when this is true, signs are not allowed
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '.' && !seenDot) {
seenDot = true;
validStr.append(c);
} else if ((c == '-' || c == '+') && !seenDigit) {
validStr.append(c);
} else if (Character.isDigit(c)) {
seenDigit = true;
validStr.append(c);
} else if (Character.isWhitespace(c)) {
// just skip over whitespace
continue;
} else {
// invalid character
break;
}
}
return Double.parseDouble(validStr.toString());
}
测试:
public static void main(String[] args) {
System.out.println(val(" 1615 198th Street N.E."));
System.out.println(val("2457"));
System.out.println(val(" 2 45 7"));
System.out.println(val("24 and 57"));
}
输出:
1615198.0 2457.0 2457.0 24.0
我无法保证其速度,但Double.parseDouble
可能是最昂贵的部分。我想在这个函数中进行双重解析可能要快一点,但我确定这首先是瓶颈。否则,这不值得麻烦。
答案 2 :(得分:0)
试试这个:
Number Val(String value) {
try {
return NumberFormat.getNumberInstance().parse(value);
} catch (ParseException e) {
throw new IllegalArgumentException(value + " is not a number");
}
}
Number a = Val("10"); // a instanceof Long
Number b = Val("1.32"); // b instanceof Double
Number c = Val("0x100"); // c instanceof Long
答案 3 :(得分:0)
ValResult = Val(" 1615 198th Street N.E.") ' ValResult is set to 1615198 ValResult = Val("2457") ' ValResult is set to 2457. ValResult = Val(" 2 45 7") ' ValResult is set to 2457. ValResult = Val("24 and 57") ' ValResult is set to 24.
任何Java API都可以产生相同的行为吗?
答案 4 :(得分:0)
var val = parseFloat("0" + /\d*\.?\d*/.exec(value))
答案 5 :(得分:-2)
如果要将字符串转换为整数,请使用:
int x = Integer.parseInt(aString);