0
我想將當前的代碼轉換爲Java7 diamond operator
。 我有以下正則表達式來查找和替換。java7鑽石運算符轉換編譯錯誤
尋找
new (\w+)<.+>
替換:
new $1<>
問題是,它是 越來越取代了匿名類爲好。因爲這個我得到編譯錯誤。 那麼如何編寫避免內部類的正則表達式呢?
我想將當前的代碼轉換爲Java7 diamond operator
。 我有以下正則表達式來查找和替換。java7鑽石運算符轉換編譯錯誤
尋找
new (\w+)<.+>
替換:
new $1<>
問題是,它是 越來越取代了匿名類爲好。因爲這個我得到編譯錯誤。 那麼如何編寫避免內部類的正則表達式呢?
試試這個:(?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 */
};
古玩知道爲什麼要這麼做。當你編寫新的代碼,使用新的語法。保持舊代碼原樣。 – Jayan 2014-11-24 11:38:39
問題是我必須將所有現有的代碼轉換爲Java鑽石運算符。有近10,000個發生。所以手動做乏味。 – user414967 2014-11-24 11:43:25
問題是爲什麼?沒有性能增益,可讀性沒有真正的區別。正則表達式可能不適用於所有情況。不確定智能的SSR是否有幫助。或者嘗試http://www.vogella.com/tutorials/EclipseJDT/article.html – Jayan 2014-11-24 11:46:44