我有一个看起来像网址的字符串。例如:
.com/ - finds nothing
.com - finds nothing
/me - finds nothing
/me/ - finds nothing
/me/500/hello - finds nothing
/me/12/test/550 - I need find 550
/test/1500 - I need find 1500
/test/1500/ - I need find 1500
我需要提取总是最后的数字,现在我这样做
int index = url.lastIndexOf('/');
String found = url.substring(index + 1, url.length());
if(Pattern.matches("\\d+", found)) {
// If found digits at the end doSometihng
}
但是我不喜欢这个解决方案,如果我最后有斜线,它就不起作用了。 抓住最后一位数字会有什么好处?
答案 0 :(得分:2)
如果没有任何其他数字,则数字为最后一个。在正则表达式:
public static void findLastNumber() {
String str = "/me/12/test/550/";
Pattern p = Pattern.compile("(\\d+)(?!.*\\d)");
Matcher m = p.matcher(str);
if (m.find()) {
System.out.println("Found : " + m.group());
}
}
您可以测试此正则表达式here。
答案 1 :(得分:0)
我相信以下代码可以满足您的需求:
public Integer findLastInteger(String url) {
Scanner scanner = new Scanner(url);
Integer out = null;
while(scanner.hasNextInt())
out = scanner.nextInt();
return out;
}
此代码返回您的最后一个整数(如果有),如果没有,则返回null
。
答案 2 :(得分:0)
String text = "/test/250/1900/1500/";
Pattern pattern = Pattern.compile("^(.*)[^\\d](\\d+)(.*?)$");
Matcher matcher = pattern.matcher(text);
if(matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println("true");
} else {
System.out.println("False");
}
输出结果为:
/test/250/1900
1500
/
你想要抓住小组(2)。
答案 3 :(得分:0)