Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式快速_Java_Regex - Fatal编程技术网

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()不需要锚定。这并没有以任何方式解决问题。