转换VB';从Val到Java?

转换VB';从Val到Java?,java,vb6,Java,Vb6,如何使用Java编程语言实现VB的Val()函数,或者是否存在具有相同方法的API?您应该使用等-或a,这取决于您是否希望以区域性敏感的方式处理输入 编辑:请注意,这些参数期望字符串包含数字,而不包含其他内容。如果希望能够解析可能以数字开头然后包含其他位的字符串,则需要首先清理字符串,例如使用正则表达式。如果要将字符串转换为整数,请使用: int x = Integer.parseInt(aString); 如果我的谷歌技能对我有用,Val()将字符串转换为数字;对吗 如果是,或者是最接近的J

如何使用Java编程语言实现VB的Val()函数,或者是否存在具有相同方法的API?

您应该使用等-或a,这取决于您是否希望以区域性敏感的方式处理输入


编辑:请注意,这些参数期望字符串包含数字,而不包含其他内容。如果希望能够解析可能以数字开头然后包含其他位的字符串,则需要首先清理字符串,例如使用正则表达式。

如果要将字符串转换为整数,请使用:

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))