2016-02-05 118 views
-2
import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static void main(String[] args) throws IOException{ 

     BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); 
     String line=""; 
     Pattern pattern= Pattern.compile("(?s)\\s*(/\\*.*\\*/)",Pattern.DOTALL); 
     while((line=br.readLine())!=null){ 
      Matcher matcher= pattern.matcher(line); 
      while(matcher.find()){ 
       System.out.println(matcher.group()); 
      } 

     } 
    } 
} 

我在尝试检测多行注释。我错在哪里?Java中的多行注释 - 出错了?

+0

什么是错误(消息/调用堆栈)?什么是错误的结果?它是用于特定的输入行吗? – YoYo

+1

*我错在哪里?*使用正则表达式解析:-) –

+0

我应该使用什么? – Krishna

回答

2

我在尝试检测多行注释。我错在哪里

你的正则表达式看起来不错,但它有多余的(?s),它不会与嵌套注释一起使用。此外.*是贪婪的,所以它会发现最后*/而不是最短的一个。

然而主要问题是使用:

br.readLine() 

这是逐行读取输入行,因此你的模式匹配是无法检测到多行注释时,输入您matcher方法只是一条线。

+1

Java中禁止嵌套注释吗? –

+0

嵌套我的意思是'/ *一些评论/ *文本*/int x = 1;/*更多评论* /' – anubhava

+1

你是一个非常聪明的人:) –