我感到愚蠢,我无法弄清楚这一点,但它真的开始让我感到沮丧。
我只是想确保字符串只包含使用string.match(regex)
的数字。如果它包含任何非数字字符,请将其硬编码为9999999。
这是我的代码。我基本上是在检查我从ResultSet
moduleResults中提取的结果是否包含非数字字符,然后再使用setEndPointID
接受long作为其参数。 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);
}
答案 0 :(得分:4)
您需要start and end anchors来确保整个字符串是数字。您还需要使用+
而不是*
这样正则表达式匹配至少1位数(^\\d*$
将匹配空字符串)。完全重构:
long endPointID = 99999999;
String strEndPointID = moduleResults.getString("id_amr_module").trim();
if(strEndPointID.matches("^\\d+$")){
endPointID = Long.parseLong(strEndPointID);
}
msiRF.setEndpointID(endPointID);
答案 1 :(得分:4)
问题是您的正则表达式会搜索任意数量的数字。您正在寻找的是这样的:^\d+$
^
表示字符串的开头\d+
表示至少一位数$
表示字符串的结尾答案 2 :(得分:2)
你的正则表达式应该是:
"^\\d*$"
^
- 从头开始
\\d*
- 匹配您找到的数字
$
- 直到到达字符串