从字符串Java中提取数字

时间:2015-02-18 23:56:05

标签: java regex

我有一个看起来像网址的字符串。例如:

.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
}

但是我不喜欢这个解决方案,如果我最后有斜线,它就不起作用了。 抓住最后一位数字会有什么好处?

4 个答案:

答案 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)

试试这个正则表达式

.*\/(\d+)\/?

第一个捕获组是你的号码。

sample