Java Regex快速

时间:2011-10-28 14:27:20

标签: java regex

我感到愚蠢,我无法弄清楚这一点,但它真的开始让我感到沮丧。

我只是想确保字符串只包含使用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);
}

3 个答案:

答案 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* - 匹配您找到的数字 $ - 直到到达字符串

的末尾