2010-09-03 3 views
2
final static private Pattern includePattern = Pattern.compile("^\\s+([^\\s]*)"); 

... 

Matcher mtest = includePattern.matcher(" this.txt"); 
String ftest = mtest.group(1); 

я получаю исключение No match found at java.util.regex.Matcher.group(Matcher.java:468)Что не так с этим регулярным выражением java?

Я ищу по крайней мере, 1 пробела и захваченной группой nonspace символов. Где я ошибся?

ответ

12

Вам сначала нужно позвонить .find(), прежде чем использовать group(...).

Обратите внимание, что find() возвращает boolean, так что это безопасно (г), чтобы сделать что-то вроде этого:

final static private Pattern includePattern = Pattern.compile("^\\s+([^\\s]*)"); 
Matcher mtest = includePattern.matcher(" this.txt"); 
String ftest = m.find() ? mtest.group(1) : null; 

И [^\\s] можно переписать в виде \\S (капитала s).

Возможно, вы немного упростили свой пример в своем вопросе, но я предполагаю, что вы знаете, что String.trim() заботится о любых символах пробега и пробела.

+0

DOH! Спасибо, что исправил это. –

+0

@ Джейсон, затем примите ответ. –

+0

Я не могу еще 10 минут. –

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