gpt4 book ai didi

java - 使用或不使用正则表达式从 java.lang.reflect.Method 对象中提取完全限定的类名

转载 作者:行者123 更新时间:2023-12-02 08:29:35 24 4
gpt4 key购买 nike

我正在编写一个方法,该方法应该从 java.lang.reflect.Method 对象中提取完全限定的类名。由于我找不到任何方便的方法来获取方法对象的类名,因此我尝试使用以下正则表达式来提取它:

([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;
}

不幸的是,我构建的正则表达式无法正常工作,因为它给了我两个结果组,但它应该只给我一组。当我用 Method 调用该方法时

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

因此该方法返回第一组“com.test.user.impl.UserServiceImpl.deleteUser(”,但它应该是“com.test.user.impl.UserServiceImpl. deleteUser”。我不想手动选择组,但我想要一个应该已经为我提供一个匹配组的正则表达式。我的正则表达式有什么问题吗?

最佳答案

String methodName = method.getDeclaringClass().getName() 

如果您坚持使用正则表达式,修复方法如下:

while (m.find()) {
result = m.group(1);

System.out.println(result);
}

group()group(0) 始终返回整个匹配的字符串。您需要 group(n) where n > 0 来获取括号内的值。

但是,我建议您在这种情况下不要使用正则表达式。

关于java - 使用或不使用正则表达式从 java.lang.reflect.Method 对象中提取完全限定的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3759277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com