java注释有单行注释和多行注释,分别进行匹配
- 正则匹配多行注释
\s*/\*(?:.|\n)*?\*/
- 正则匹配单行注释
//.*
提取成一个方法:
kotlin
/**移除注释和多余换行*/
fun replaceComment(s: String): String{
return """\s*/*(?:.|\n)*?*/""".toRegex().replace(s,"").let {
"""//.*""".toRegex().replace(it,"")
}.let {
"""(?:\s*\n){2,}""".toRegex().replace(it,"\n")
}
}
在java编码中,有很多枚举类碍于规范定义很多值相同的冗余字段,也可以通过正则表达式简化
kotlin
/**如果一个枚举类有,code,englishName,chineseName,description四个字段,
* 且枚举类的name,code,englishName一样,且chineseName和description一样,
* 就简化枚举类为name(description)格式*/
fun enumCodeAndEngNameIsSame(s: String){
val res = ArrayList<String>()
s.split("\n").forEach {
val s = """([A-Z]\w*)\s*?(\s*?"\1"\s*?,\s*?"\1"\s*?,\s*?"((?:[^"]*))"\s*?,\s*?"\2"\s*)\s*[,;]""".toRegex().find(it)
if (s!=null){
res.add("""${s.groups[1]?.value}("${s.groups[2]?.value}")""")
}
else if (it.isNotBlank()){
throw RuntimeException("$it >> Code != EnglishName || ChineseName != Description")
}
}
println(res.joinToString(separator = ",\n")+";")
}
测试代码
kotlin
/**测试删除枚举类冗余字段和注释及多余换行*/
fun main() {
val code = """/**顶部注释1*/
/**注释2*/
E1("E1","E1","枚举E1","枚举E1" /*行内注释*/),//行尾注释
/**
* 注释3
XXX
//
*/
//注释4
/** 信披敏感数据*/
E2("E2","E2","枚举E2","枚举E2" );"""
enumCodeAndEngNameIsSame(replaceComment(code))
/*输出:
E1("枚举E1"),
E2("枚举E2");
*/
}