Java实现将源文件中的注释替换成空行。
程序员文章站
2022-07-14 13:04:00
...
以Css文件为例, 为了能准确地定位,需要把段注释也要替换成空行,网上有现成的实现,不过有问题,对于段注释不能保持原来的行。于是自己写了一个实现。
package test;
import java.io.File; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; /* * Java实现将源文件中的注释替换成空行。 * * 以Css文件为例, 为了能准确地定位,需要把段注释也要替换成空行,网上有现成的实现,不过有问题,对于段注释不能保持原来的行。于是自己写了一个实现。 * * 1, Java读系统的行分隔符: System.getProperty("line.separator"), 并用此计算行号。 * 2, 最小化匹配正规表达式的写法,下面String类型pattern里的第二个问号。 * 3, 正规表达式的替换。 */ public class CommontReplace { static String pattern = "(?s)/\\*.*?\\*/"; public static void main(String[] args) throws Exception{ File f = new File("commonReplace/test/CommontReplace.java"); String content = FileUtils.readFileToString(f, "UTF-8"); content = replace(content); System.out.println("content: \n" + content); } /* fdas; */ public static String replace(String content) throws Exception { Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE); Matcher m=p.matcher(content); StringBuffer sb=new StringBuffer(); while (m.find()) { String comment = m.group(); String replacement = createBlankLines(getLineNum(comment)); m.appendReplacement(sb, replacement); } m.appendTail(sb); return sb.toString(); } private static int getLineNum(String content) { String[] splitted = content.split(System.getProperty("line.separator")); return splitted.length; } private static String createBlankLines(int lineNums) { String lineSep = System.getProperty("line.separator"); StringBuilder result = new StringBuilder(); for(int i=0;i<lineNums -1 ;i++) { result.append(lineSep + " "); } return result.toString(); } }