2015-02-18 3 views
2

У меня есть строка, которая похожа на URL-адрес. Например:Извлечь числа из строки Java

.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

Я считаю, что следующий код делает то, что вам нужно:

public Integer findLastInteger(String url) { 
    Scanner scanner = new Scanner(url); 
    Integer out = null; 
    while(scanner.hasNextInt()) 
    out = scanner.nextInt(); 
    return out; 
} 

Этот код возвращает ваше последнее число, если есть, и возвращает null если нет.

+0

Это решение также будет найти случай '/ Me/500/привет -> 500'. – vinntec

+0

в этом случае мне не нужно его искать – antohoho

+0

Хорошо, проблема была указана ниже. – vinntec

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.

+0

Если цифры всегда находятся в конце строки, вам не нужно искать. – hwnd

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

0

попробовать это регулярное выражение

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

первая группа записи ваш номер.

sample

Смежные вопросы