Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用String.replaceAll函数替换Pattern.dotal?_Java_Regex_String - Fatal编程技术网

Java 如何使用String.replaceAll函数替换Pattern.dotal?

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

我正在创建一个简单的项目,它是一个简单的IDE

我正在IDE中检测源代码(长字符串)的注释并将其删除

我尝试了许多正则表达式来检测注释,这个正则表达式对我检测注释的效果最为一致:

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) { }