2015-04-22 1 views
1

Я пытаюсь разобрать двойную строку. У меня есть код:Как вытащить двойную строку из строки с совпадением

Pattern p = Pattern.compile("-?\\d+(\\.\\d+)?"); 
Matcher m = p.matcher("reciproc(2.00000000000)"); 
System.out.println(Double.parseDouble(m.group())); 

Этот код вызывает java.lang.IllegalStateException. Я хочу, чтобы выход был 2.00000000000. Я получил регулярное выражение от Java: Regex for Parsing Positive and Negative Doubles, где он, похоже, работал на них. Я также пробовал несколько других регулярных выражений, и все они бросали ту же ошибку. Я что-то упустил?

+0

Итак, каков ваш результат? – Kasramvd

+0

it throws a java.lang.IllegalStateException – lights

+0

Проверьте строку, переданную 'Pattern.matcher()'. Считаете ли вы, что это будет соответствовать регулярному выражению, которое вы дали? – kaykay

ответ

2

Это не проблема с регулярным выражением, но в как вы используете класс Matcher. Сначала нужно вызвать find().

Это должно работать:

Pattern p = Pattern.compile("-?\\d+(\\.\\d+)?"); 
    String text = "reciproc(2.00000000000)"; 
    Matcher m = p.matcher(text); 
    if(m.find()) 
    { 
     System.out.println(Double.parseDouble(text.substring(m.start(), m.end()))); 
    } 

В качестве альтернативы:

Pattern p = Pattern.compile("-?\\d+(\\.\\d+)?"); 
    Matcher m = p.matcher("reciproc(2.00000000000)"); 
    if(m.find()) 
    { 
     System.out.println(Double.parseDouble(m.group())); 
    } 

Для получения дополнительной информации см the docs.

0

p.matcher("2.000000000000");

Ваш рисунок должен соответствовать регулярному выражению, представленную в Pattern.compile()

Для получения дополнительной информации о регулярных выражений и шаблонов:

https://docs.oracle.com/javase/tutorial/essential/regex/ https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

+0

Ваш ответ точно? Мне нужно вытащить его из «reciproc (2.00000000000)» – lights

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

  • Нет связанных вопросов^_^