转换VB';从Val到Java?
如何使用Java编程语言实现VB的Val()函数,或者是否存在具有相同方法的API?您应该使用等-或a,这取决于您是否希望以区域性敏感的方式处理输入转换VB';从Val到Java?,java,vb6,Java,Vb6,如何使用Java编程语言实现VB的Val()函数,或者是否存在具有相同方法的API?您应该使用等-或a,这取决于您是否希望以区域性敏感的方式处理输入 编辑:请注意,这些参数期望字符串包含数字,而不包含其他内容。如果希望能够解析可能以数字开头然后包含其他位的字符串,则需要首先清理字符串,例如使用正则表达式。如果要将字符串转换为整数,请使用: int x = Integer.parseInt(aString); 如果我的谷歌技能对我有用,Val()将字符串转换为数字;对吗 如果是,或者是最接近的J
编辑:请注意,这些参数期望字符串包含数字,而不包含其他内容。如果希望能够解析可能以数字开头然后包含其他位的字符串,则需要首先清理字符串,例如使用正则表达式。如果要将字符串转换为整数,请使用:
int x = Integer.parseInt(aString);
如果我的谷歌技能对我有用,
Val()
将字符串转换为数字;对吗
如果是,或者是最接近的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());
}
输出:
1615198.0
2457.0
2457.0
24.0
1615198
2457
2457
24
我不能保证它的速度,但很可能Double.parseDouble
是最昂贵的部分。我想在这个函数中进行双重解析可能会快一点,但我必须首先确定这是一个瓶颈。否则,就不值得麻烦了。试试这个:
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
ValResult=Val(“1615 198北东街”)“ValResult设置为1615198
ValResult=Val(“2457”)“ValResult设置为2457。
ValResult=Val(“2 45 7”)“ValResult设置为2457。
ValResult=Val(“24和57”)“ValResult设置为24。
任何Java API都可以做出相同的行为
var val = parseFloat("0" + /\d*\.?\d*/.exec(value))
它转换为双精度。但我不确定这在Java类型系统中是如何映射的,它们与Val做的事情不同。与val不同的是,它们需要干净的字符串。基本上,我已经“实现”了这个答案,没有常规表达式,val将获取字符串“123 LakeView Dr”,并返回nmber 123。解析将不会。您可以简单地添加一个正则表达式来去除非数字部分。您可能希望使用正则表达式来删除任何非数字(可能允许。和-如果您想要非整数和负数…请记住转义。尽管!) 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.
var val = parseFloat("0" + /\d*\.?\d*/.exec(value))