我正在尝试从ArrayList构建一个hashMap,它包含我需要的所有变量及其各自的值。
问题是,我的arrayList包含非数值的变量(例如:var1 =“ * $& / @”)。如何过滤arrayList中包含的数据以仅获取数字字符串。
我尝试使用正则表达式,但数据过滤太多而且我需要的一些变量会丢失。我想我没有使用合法的正则表达式。所以我尝试匹配以下正则表达式,如果没有,请为我的变量赋值“0”。这大致是我到目前为止所尝试的内容:
private static final String REGEX = "-?\\d+(\\.\\d+)?";
//...
if (val_ens1_sol.matches(REGEX) && val_ens1_bord.matches(REGEX)) {
reslutatsMap.put(key_ens1_sol, val_ens1_sol);
reslutatsMap.put(key_ens1_bord, val_ens1_bord);
} else {
val_ens1_sol = "0";
val_ens1_sol = "0";
}
答案 0 :(得分:1)
已经在其他地方(How to check if a String is numeric in Java)回答了这个问题,但讨论了可能性:要么假设你有数字字符串,解析字符串是整数或双精度并捕获数字格式异常,要么使用正则表达式
答案 1 :(得分:0)
你可以使用BigDecimal
执行此操作,它将解析所有整数/小数点浮点数/科学浮点数:
try {
new BigDecimal(val_ens1_sol);
new BigDecimal(val_ens1_bord);
} catch (NumberFormatException ignored) {
// deal with at least one value not being a number
}