Я пишу метод, который должен извлекать полное имя класса из java.lang.reflect.Method -объекта. Поскольку я не смог найти удобный метод для получения имени класса объекта-метода, я пытаюсь извлечь его с помощью следующего выражения Regex:
([A-Za-z.]*)[\(]
(может быть, есть и способ без регулярных выражений?).
public String getFullClassName(Method method) {
// Example methodname:
// public void com.test.user.impl.UserServiceImpl.deleteUser(java.lang.Long) throws com.test.user.api.exception.UserServiceException
String methodName = method.toString();
Pattern p = Pattern.compile("([A-Za-z.]*)[\\(]");
Matcher m = p.matcher(methodName);
String result = "";
while (m.find()) {
result = m.group();
}
return result;
}
К сожалению, Regex, который я построил, не работает правильно, так как он дает мне две группы результатов, но он должен давать мне только одну группу. Когда я вызываю метод с методом
public void com.test.user.impl.UserServiceImpl.deleteUser(java.lang.Long) throws com.test.user.api.exception.UserServiceException
, я получаю две подходящие группы:
Group(0) = com.test.user.impl.UserServiceImpl.deleteUser(
Group(1) = com.testuser.impl.UserServiceImpl.deleteUser
поэтому метод возвращает первую группу". Я не хочу выбирать группу вручную, но мне нужно регулярное выражение, которое уже должно дать мне одну подходящую группу. Что не так с моим регулярным выражением?