Java正则表达式快速
我觉得自己搞不懂这件事很傻,但这真的开始让我生气了 我只是尝试使用Java正则表达式快速,java,regex,Java,Regex,我觉得自己搞不懂这件事很傻,但这真的开始让我生气了 我只是尝试使用string.match(regex)确保字符串只包含数字。如果它包含任何非数字字符,请将其硬编码为9999999 这是我的密码。我主要是检查从ResultSetmoduleResults中提取的结果是否不包含非数字字符,然后再将其用于setEndPointID,该参数接受long作为其参数。trim()在那里,因为在id\u amr\u模块中经常有前导空格,我不想让它们偏离正则表达式匹配。我也尝试过正则表达式[0-9]*但没有成
string.match(regex)
确保字符串只包含数字。如果它包含任何非数字字符,请将其硬编码为9999999
这是我的密码。我主要是检查从ResultSet
moduleResults中提取的结果是否不包含非数字字符,然后再将其用于setEndPointID
,该参数接受long作为其参数。trim()
在那里,因为在id\u amr\u模块
中经常有前导空格,我不想让它们偏离正则表达式匹配。我也尝试过正则表达式[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);
}
您需要确保整个字符串都是数字。您还需要使用+
而不是*
,以便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);
您需要确保整个字符串都是数字。您还需要使用+
而不是*
,以便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);
问题是正则表达式搜索任意数量的数字。您要查找的内容如下:
^\d+$
表示字符串的开头^
表示至少一位数字\d+
表示字符串的结尾$
- 问题在于正则表达式搜索任意数量的数字。您要查找的内容如下:
^\d+$
表示字符串的开头^
表示至少一位数字\d+
表示字符串的结尾$
- 您的正则表达式应该是:
"^\\d*$"
^
-从头开始
\\d*
-匹配找到的任意多个数字
$
-在到达字符串末尾之前,您的正则表达式应该是:
"^\\d*$"
^
-从头开始
\\d*
-匹配找到的任意多个数字
$
-在到达字符串末尾之前实际上。。。开始和结束锚不应该是必要的,至少如果有人相信Mhm上写的内容。我从来没有注意到。真奇怪。尽管如此……这并不能真正解决问题,但作者还是接受了一个与我非常相似的答案修复程序将“*”替换为“+”,你们都做对了。实际上。。。开始和结束锚不应该是必要的,至少如果有人相信Mhm上写的内容。我从来没有注意到。真奇怪。尽管如此……这并不能真正解决问题,但作者还是接受了一个与我非常相似的答案修复程序将“*”替换为“+”,这是正确的。String.matches()不需要锚。你说得对。显示我使用String#matches()
的频率。我想OP唯一缺少的是+
,而不是*
+1来纠正OP使用trim()
@TyC,您使用它的方式没有效果,因为您没有将trim()
的结果赋给变量:strEndPointID=strEndPointID.trim()代码>谢谢@Alanmore。我只花了一分钟就明白了为什么它仍然不起作用(因为没有分配trim())。String.matches()不需要锚。你说得对。显示我使用String#matches()
的频率。我想OP唯一缺少的是+
,而不是*
+1来纠正OP使用trim()
@TyC,您使用它的方式没有效果,因为您没有将trim()
的结果赋给变量:strEndPointID=strEndPointID.trim()代码>谢谢@Alanmore。我只花了一分钟就明白了为什么它仍然不起作用(因为没有分配trim())-1不正确-String.matches()不需要锚。这不会以任何方式解决问题。-1不正确-String.matches()不需要锚定。这并没有以任何方式解决问题。