2014-11-24 25 views
0

我想將當前的代碼轉換爲Java7 diamond operator。 我有以下正則表達式來查找和替換。java7鑽石運算符轉換編譯錯誤

尋找

new (\w+)<.+> 

替換:

new $1<> 

問題是,它是 越來越取代了匿名類爲好。因爲這個我得到編譯錯誤。 那麼如何編寫避免內部類的正則表達式呢?

+0

古玩知道爲什麼要這麼做。當你編寫新的代碼,使用新的語法。保持舊代碼原樣。 – Jayan 2014-11-24 11:38:39

+0

問題是我必須將所有現有的代碼轉換爲Java鑽石運算符。有近10,000個發生。所以手動做乏味。 – user414967 2014-11-24 11:43:25

+1

問題是爲什麼?沒有性能增益,可讀性沒有真正的區別。正則表達式可能不適用於所有情況。不確定智能的SSR是否有幫助。或者嘗試http://www.vogella.com/tutorials/EclipseJDT/article.html – Jayan 2014-11-24 11:46:44

回答

0

試試這個:(?s)new (\w+)<.+>(\(.*?\);)

String test = "List<String> t = new ArrayList<String>();"; 
System.out.println(test.replaceAll("(?s)new (\\w+)<.+>(\\(.*?\\);)", "new $1<>$2")); 

String test2 = "List<String> t = new ArrayList<String>(getList());"; 
System.out.println(test2.replaceAll("(?s)new (\\w+)<.+>(\\(.*?\\);)", "new $1<>$2")); 

String test3 = "List<String> t = new ArrayList<String>(\n\tgetList(\n\t\tanotherMethod()\n\t)\n);"; 
System.out.println(test3.replaceAll("(?s)new (\\w+)<.+>(\\(.*?\\);)", "new $1<>$2")); 

String test4 = "List<String> t = new List<String>(){ /* implementation */ };"; 
System.out.println(test4.replaceAll("(?s)new (\\w+)<.+>(\\(.*?\\);)", "new $1<>$2")); 

String test5 = "List<String> t = new List<String>()\n{\n\t/* implementation */\n};"; 
System.out.println(test5.replaceAll("(?s)new (\\w+)<.+>(\\(.*?\\);)", "new $1<>$2")); 

它打印:

List<String> t = new ArrayList<>(); 
List<String> t = new ArrayList<>(getList()); 
List<String> t = new ArrayList<>(
    getList(
     anotherMethod() 
    ) 
); 
List<String> t = new List<String>(){ /* implementation */ }; 
List<String> t = new List<String>() 
{ 
    /* implementation */ 
};