Если мои навыки 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
самая дорогая часть. Я полагаю, что в этой функции также может быть немного быстрее выполнить двойной анализ, но я был бы уверен, что это узкое место в первую очередь. В противном случае, это просто не стоит проблем.