将VB的Val转换为Java?

时间:2009-05-12 12:56:42

标签: java vb6

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

6 个答案:

答案 0 :(得分:7)

您应该使用Integer.parseIntFloat.parseFloatDouble.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)

答案 5 :(得分:-2)

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

int x = Integer.parseInt(aString);