我需要解析这个字符串"/<productId>/save"
,我必须确保productId是一个32位的无符号整数。
当然我可以使用字符&#34; /&#34;来分割String。然后在返回的数组中尝试将产品Id转换为Integer,看看我是否得到异常,但它似乎不是一个非常优雅的解决方案。
相反,我尝试使用这个正则表达式boolean match=path.matches("\\/\\d+\\/save");
,它工作正常,但它不遵守32位整数的限制,基本上我可以输入任意大小的数字。
即followinf字符串/44444444444444444/save";
与正则表达式匹配。
更优雅的方法是什么?你能推荐我任何方法吗?
答案 0 :(得分:1)
这是一个解决数字过大的可能性的解决方案:
@Test
public void testMatchIntWithRegex() {
String rgx = "\\/(\\d+)\\/save";
String example = "/423/save";
String exampleB = "/423666666666666666666666666666666666666666/save";
Pattern p = Pattern.compile(rgx);
Matcher m = p.matcher(example);
if(m.find()){
String sInt = m.group(1);
try{
int num = Integer.parseInt(sInt);
System.out.println("num is : " + num);
} catch(NumberFormatException e){
e.printStackTrace();
}
}
}
示例有效,而exampleB抛出异常