在分析源碼的時候看到了很多不必要的塊級註釋,因此萌生了自己寫一些小方法的念頭,說幹就幹,歡迎一起commit,各種各樣的方法,持續更新。
https://github.com/LSLWind/trueDamage
代碼分析
去掉塊級註釋
public static String blockAnnotationFiltering(String code)
/**
* 將代碼中的塊級註釋過濾掉
* @param code 給定代碼
* @return 塊級註釋過濾掉的代碼
*/
public static String blockAnnotationFiltering(String code){
//正則表達式匹配/**/
String regex="/[*][\\s\\S]*?[*]/";//[\s\S]匹配任意字符,?爲非貪婪匹配
Pattern pattern=Pattern.compile(regex,Pattern.MULTILINE);//多行匹配
//匹配結果,根據結果記錄非/**/中的內容
Matcher matcher=pattern.matcher(code);
StringBuilder res=new StringBuilder();
int left=0;
while (matcher.find()){
res.append(code, left, matcher.start());
left=matcher.end()+1;//+1是爲了跳過換行符
}
res.append(code.substring(left));//最後仍然要匹配一次
//去掉連續的換行符
StringBuilder realRes=new StringBuilder();
int ite=0;
while (ite+1<res.length()){
if(!(res.charAt(ite)=='\n'&&res.charAt(ite+1)=='\n')){//不是連續的換行則加上字符
realRes.append(res.charAt(ite));
}
ite++;
}
return realRes.toString();
}
測試,使用JUnit5:
@org.junit.jupiter.api.Test
void blockAnnotationFiltering() {
Throwable throwable=new Throwable();//IDEA ctrl+shift+i然後ctrl+enter進入源碼,複製測試
System.out.println(StringUtils.blockAnnotationFiltering(""));//太長了在這就不貼了
}