Java 如何使用String.replaceAll函数替换Pattern.dotal?
我正在创建一个简单的项目,它是一个简单的IDE 我正在IDE中检测源代码(长字符串)的注释并将其删除 我尝试了许多正则表达式来检测注释,这个正则表达式对我检测注释的效果最为一致:Java 如何使用String.replaceAll函数替换Pattern.dotal?,java,regex,string,Java,Regex,String,我正在创建一个简单的项目,它是一个简单的IDE 我正在IDE中检测源代码(长字符串)的注释并将其删除 我尝试了许多正则表达式来检测注释,这个正则表达式对我检测注释的效果最为一致: Pattern commentsSingle = Pattern.compile("\\/\\/.*"); Pattern commentsMulti = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL); 我想修改此注释检测,以便能够使用String.replac
Pattern commentsSingle = Pattern.compile("\\/\\/.*");
Pattern commentsMulti = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);
我想修改此注释检测,以便能够使用String.replaceAll
方法删除注释
我可以通过以下方式轻松完成单行评论:
code = code.replaceAll("\\/\\/.*", "");
但是,多行注释具有模式.DOTALL
,因此我无法正确使用String.replseall方法
有人能帮我修改正则表达式或调用另一个方法,这样我就可以正确地替换多行注释了吗
我尝试过的一些正则表达式:
("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)",""))
上面的正则表达式有时会导致堆栈溢出异常而不是
字符串。replaceAll
,您可以使用from,然后可以使用模式构建模式。DOTALL
:
看起来像这样:
final Pattern pattern = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);
final Matcher matcher = pattern.matcher(comment);
final String strWithoutComments = matcher.replaceAll("");
final String code = "/**\n" +
" * \n" +
" * @param args\n" +
" */\n" +
"public static void main(final String[] args) { }\n";
final String codeWithoutComments = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL).matcher(code)
.replaceAll("");
System.out.println(code);
System.out.println(codeWithoutComments);
示例如下所示:
final Pattern pattern = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);
final Matcher matcher = pattern.matcher(comment);
final String strWithoutComments = matcher.replaceAll("");
final String code = "/**\n" +
" * \n" +
" * @param args\n" +
" */\n" +
"public static void main(final String[] args) { }\n";
final String codeWithoutComments = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL).matcher(code)
.replaceAll("");
System.out.println(code);
System.out.println(codeWithoutComments);
将在替换之前打印此内容:
/**
*
* @param args
*/
public static void main(final String[] args) { }
在替换之后:
public static void main(final String[] args) { }