2010-09-21 10 views
0

我正在編寫一個方法,應該從中提取完全限定的類名稱java.lang.reflect.Method - 目的。因爲我無法找到任何方便的方法得到一個方法對象的類名,我試圖用下面的正則表達式,則表達式來提取它:從具有或不具有正則表達式的java.lang.reflect.Method對象中提取完全quallified類名

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

不幸的是,我構建的正則表達式無法正常工作,因爲它給了我兩個結果組,但它應該只給我一個組。當我打電話的方法,該方法

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「。我不想手動選擇組,但我想要一個正則表達式應該已經給我一個匹配組。與我的正則表達式?

回答

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

,如果你堅持使用正則表達式,這裏是修復:

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

    System.out.println(result); 
} 

group()group(0)總是返回整個匹配的字符串。您需要group(n)其中n > 0以獲取括號內的值。

但是,我建議你不使用正則表達式來處理這種情況。

+0

該死的......我發誓我也試過,沒有成功;)但知道它的作品。無論如何,如果任何人也有我的正則表達式的修復它會沒事,只是要知道我會寫一個匹配的正則表達式,當沒有便利的方法 – ifischer 2010-09-21 10:23:17

+0

謝謝。當然,我現在不使用正則表達式。但是必須有一個更好的正則表達式,它只給我一個組(沒有左括號)? – ifischer 2010-09-21 10:48:06

+0

你可以嘗試Pattern.compile(「([A-Za-z。] *)」),但它也會給java.lang.Long和com.test.user.api.exception.UserServiceException – nanda 2010-09-21 10:56:37

相關問題