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("@")分割,这就会是一个区块,一个区块的。
但是这样,方法的注解就没有被放到同一个方法内了。