2.區分是屬性還是方法,進而處理這個方法。
-取得屬性
在這個專案子,絕大部份的程式都有一定的規格,而屬性,他們要求是放益方法前面。而我隨機檢驗幾十個方法,都是如此,也沒有在方法和方法之間穿插屬性。
所以我在將整段文章從第一個字取到第一個function的前20個字,我將它標記為屬性區域。
// 分區塊
int index2 = str.indexOf("function");
String str1 = str.substring(0, index2 - 7);
int index3 = str1.lastIndexOf(";");
str1 = str1.substring(0, index3);
if (num == 1) {
data += getNote(str1) + "\n";
}
String abc = founction1(str1);// 第一區塊進入方法處理
data += abc + "\n";
data += init();
int index = index2 - 20;
-取得方法
之後利用堆疊的方式找出每一段方法。從剛才截取後的程式從第一個字開始找,遇到{時就開始記彔,當}為空時,就代表這個方法結束了。
因為方法內會有if,for迴圈之類有{}的程式,所以我用堆疊的方法記錄"{",當遇到"}"時,就取出一個"{", 但裡面是空的時後,就是
這個方法結束。這樣我就知道這個方法的長度了。
import java.util.Stack;
Stack<String> st = new Stack<String>();
//用堆疊的方式,有{就存起來,有}就拿出一個{,等到堆疊為空時,就代表這個的方法結束。
for (int i = index; i < str.length(); i++) {
if (str.charAt(i) == '{') {
//放入一個"{"
st.push("{");
} else if (str.charAt(i) == '}') {
//拿出一個"{"
st.pop();
if (st.isEmpty()) {
String str2 = str.substring(index, i + 1);//取出整段方法
index = i + 1;
String abc2 = founction2(str2);// 另外呼叫程式處理這個方法
}
}
}
其他:在整個程式完成後想到另一個分解屬性和方法區塊的作法。
整篇程式碼先用split("\n")將資料轉為字串陣列
原本是想說將資料用split("\n")將資料轉為字串陣列,然後逐行比對每一行,在找到function時,在該行最前面加入一個"@"
public static const NAME:String="A00I15Mediator";
private var a00i15VO:A00I15_SMT01_InputVO=new A00I15_SMT01_InputVO();//讀取系統變數
private var SYSLOGINBRH:String="";//txn.登入分行
private var SYSLOGINBRHNAME:String="";//txn.登入分行中文名称
protected override function get model():Object{}
@public function A00I15Mediator(viewComponent:Object=null){}
@public function get a00I15View():A00I15 {}
再把檔案合成一個檔案,再用split("@")分割,這就會是一個區塊,一個區塊的。
但是這樣,方法的註解就沒有被放到同一個方法內了。