OSGi開發中方便查找的一個小工具

    一個OSGi bundle可能會有大量的引入、導出包,這會使它的manifest.mf文件很長,讓人看得眼花繚亂,於是我們經常需要在其中查找一些東西,但是由於manifest.mf文件本身的原因,給查找帶來一些麻煩,比如下面從manifest.mf的“DynamicImport-Package”中摘取出的一小段(還有很長,但沒必要全列在這裏了):

 

 , javax.xml.parsers, javax.xml.transform, javax.xml.transform.dom, ja
 vax.xml.transform.sax, javax.xml.transform.stream, javax.xml.validati
 on, javax.xml.xpath,jp.co.swiftinc.relax.schema, jp.co.swiftinc.relax
 .verifier, kaffe.rmi.rmic, org.apache.avalon.framework.logger, org.ap
 ache.bcel.classfile, org.apache.bsf, org.apache.env, org.apache.log,
 org.apache.tools.ant.launch, org.apache.tools.ant.taskdefs.optional,

 

    若我們要在其中找“apache”,第四行最後和第五行開始實際上有一個“apache”然而,由於它跨在兩行,且第五行開頭還有一個空格,用eclipse的一般查找是找不到這個的。爲什麼會這樣跨行以至於把一個單詞都分在兩行呢,是因爲這是用bnd做出的一個bundle,bnd做出的manifest.mf就是這個風格。

 

    我們利用eclipse的正則表達式查找來解決這個問題。以上面的例子說,這需要把查找字串由“apache”變成“a/s*p/s*a/s*c/s*h/s*e”,如果要找的串比較長的話,這是比較麻煩的事情。於是我們編了一個java小程序來解決這個問題,該程序從鍵盤讀入要找的字串,自動向中間添加“/s*”,代碼如下:

 

 public static void main(String[] args) {
  Scanner in = new Scanner(System.in);
  int i, lenOfStr;
  while (true) {
   System.out.print("Please input a string in a line:");
   String str = in.nextLine();
   lenOfStr = str.length();
   StringBuffer strBuf = new StringBuffer();
   if (lenOfStr > 0) {
    for (i = 0; i < lenOfStr - 1; i++) {
     strBuf.append(str.charAt(i));
     strBuf.append("//s*");
    }
    strBuf.append(str.charAt(i));
   }
   System.out.println(strBuf.toString());
  }
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章