2011-09-03 22 views
4

我必須在C#中完成一個項目才能找到每個Java類的方法數量。如何使用c sharp來統計每個java類的方法數量?

我可以使用c#正則表達式找到.java文件中的所有方法,但我想要的是找到每個類的每個類的方法數量,包括內部類。誰能幫我。

string[] lines = File.ReadAllLines(file); 

int countLine = 0; 
int AllCount = 0; 

foreach (string line in lines) 
{ 

    countLine = MethodsCount(line); 
    AllCount = AllCount + countLine; 

} 

label5.Text = AllCount.ToString(); 

這裏是計數方法。

private int MethodsCount (string LineOperator) 
{ 
    int count = 0; 

    string[] words = LineOperator.Split('{'); 

    foreach (string word in words) 
    { 
     if (Regex.IsMatch(word, @"(static\s|final\s)?(public|private|internal)(\sstatic|\sfinal)?\s(int|boolean|void|double|String|long|String\[\]|String\[\]\[\])?\s([a-z]|[A-Z]+[a-z]+|[a-z]+[A-Z]+)+(\s)*\((\s|\n|\r)*")) 
     { 
      count = count + 1; 
     } 
    } 

    return count; 
} 
如果我們考慮一類

public class vehicle { 

    public method1() { 
     --------- 
    } 

    public method2() { 
     ------ 
    } 

    public class car extends vehicle { 
     public method3() { 
      ------- 
     } 
    } 
} 

我想要得到的輸出也有這個數的車輛類的方法,這個數字在汽車類像明智的方法。

+0

包括內部類也我想找到方法的數量 – Randi

+0

哇,我當然不想嘗試通過一個單一的正則表達式,甚至一堆正則表達式。還有一件事可能會出錯:評論,我說。不要介意返回自定義類型的自定義泛型類型的函數。或者其他任何一種完全合理的情況。我認爲你在這裏打開一整桶蠕蟲。 –

+0

要添加信息或澄清您的問題,請編輯問題(請參閱文本下方的「編輯」鏈接),而不是添加評論或答案。 –

回答

3

只用正則表達式解析Java源文件最好是片狀。有很多不同的方式來格式化或註釋代碼,您很容易錯過有效的方法聲明。您的代碼示例中的正則表達式不處理換行符,泛型方法,在throws條款,任意的返回類型,在​​修改或註解參數,在同一線上的兩個方法的聲明...

你不得不降正則表達式並構建(或重用)一個完整的解析器,以確保您獲得一切。幸運的是,如果您有權訪問JDK,則可以使用快捷方式。

首先編譯Java源代碼。這會給你一個輸出目錄完整的.class文件(內部類獲取自己的文件)。掃描輸出目錄以收集需要分析的所有類名稱。

然後,對於每一類,運行javap命令,它會給你這樣的輸出:

[email protected] /tmp$ javap java.util.Iterator 
Compiled from "Iterator.java" 
public interface java.util.Iterator{ 
    public abstract boolean hasNext(); 
    public abstract java.lang.Object next(); 
    public abstract void remove(); 
} 

這是很容易不是一個完整的Java源文件進行解析。你可以統計所有包含\s[a-zA-Z][a-zA-Z0-9_]*\(的行,並且你有你的方法數。使用'編譯自'信息來獲取每個源文件的方法計數。

(編輯)注意:默認情況下,javap不打印私有方法。通過-private參數將它們包含在輸出中。

相關問題