我无法解决这个问题,这让我感到很傻,但这真的让我很生气。

我只是试图使用string.match(regex)确保字符串仅包含数字。如果它包含任何非数字字符,请将其硬编码为9999999。

这是我的代码。我实质上是在查看从ResultSet moduleResults中获取的结果是否不包含非数字字符,然后再将其用于接受长参数作为其参数的setEndPointIDtrim()之所以在其中,是因为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);

10-08 07:10