我无法解决这个问题,这让我感到很傻,但这真的让我很生气。
我只是试图使用string.match(regex)
确保字符串仅包含数字。如果它包含任何非数字字符,请将其硬编码为9999999。
这是我的代码。我实质上是在查看从ResultSet
moduleResults中获取的结果是否不包含非数字字符,然后再将其用于接受长参数作为其参数的setEndPointID
。 trim()
之所以在其中,是因为id_amr_module
中经常有前导空格,而且我不希望这些空格引起正则表达式匹配。我也尝试过正则表达式[0-9] *,但没有成功。
String strEndPointID = moduleResults.getString("id_amr_module");
strEndPointID.trim();
if(strEndPointID.matches("\\d*")){
msiRF.setEndpointID(moduleResults.getLong("id_amr_module"));
}
else{
long lngEndPointID = 99999999;
msiRF.setEndpointID(lngEndPointID);
}
最佳答案
您需要start and end anchors以确保整个字符串为数字。您还需要使用+
而不是*
,以便regexp至少匹配1个数字(^\\d*$
将匹配空字符串)。完全重构:
long endPointID = 99999999;
String strEndPointID = moduleResults.getString("id_amr_module").trim();
if(strEndPointID.matches("^\\d+$")){
endPointID = Long.parseLong(strEndPointID);
}
msiRF.setEndpointID(endPointID);