2016-06-23 6 views
1

У меня есть эта строка: page: 4, response: 5, alt: 99Как извлечь числовые значения между 3 ключами?

Я хочу, чтобы извлечь значения в массив:

[4, 5, 99]

Вот мой код, это есть способ это исправить?

pattern = "page: d+?,response: d+?, alt: d+?"; 

    String first = origianlString.replaceAll(pattern, "$0"); 
    String second = origianlString.replaceAll(pattern, "$1"); 
    String third = origianlString.replaceAll(pattern, "$2"); 
+4

Посмотрите на группы захвата. –

+0

Я не думаю, что этот вопрос не должен размещаться на переполнении стека. Он принадлежит к обзору кода. –

+0

guava предоставляет для этого причудливый разделитель: http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/base/Splitter.html#withKeyValueSeparator(char) –

ответ

2

Вы можете попробовать это:

String regex = "\\D+?(\\d+)\\D+?(\\d+)\\D+?(\\d+)"; 
String input = "page: 4, response: 5, alt: 99"; 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher(input); 
if (m.find()) { 
    String first = m.group(1); 
    String second = m.group(2); 
    String third = m.group(3); 
    System.out.println("[" + first + "," + second + "," + third+ "]"); 
} 

ВЫВОД:

[4,5,99] 
-1

Использование RepalceAll

String str = "page: 4, response: 5, alt: 99";  
str = str.replaceAll("[^0-9]+", " "); 
System.out.println(Arrays.asList(str.trim().split(" "))); 
-1

Лучшая ставка будет использовать метод разделения при условии, что значения будут всегда быть разделены «»

Например:

String data = "page: 4, response: 5, alt: 99"; 
String[] split = data.split(","); //Get each individual entry 
int[] values = new int[split.length]; //Create array to hold values 
for (int i = 0; i < split.length; i++) { //Go through each value 
    String str = split[i]; //Get the string 
    str = str.trim(); //remove whitespace 
    String[] pair = str.split(":"); //Split to get key and value separate 
    values[i] = Integer.parseInt(pair[1]); //Put int value into array 
}