【问题标题】:Remove comments from a java file and maintain file structure从 java 文件中删除注释并维护文件结构
【发布时间】:2014-10-11 17:04:53
【问题描述】:

我正在处理一个需要我从 java 文件中删除 cmets 的项目。目前,我正在使用正则表达式

(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)

我从 http://ostermiller.org/findcomment.html 那里得到的。

正则表达式效果很好,但问题是我需要在删除 cmets 时保留文件结构。换句话说,如果我有一个 3 行块注释,我需要将它替换为 3 个空行。这是必要的,以便代码保持与原始代码相同的行号。

如何将 3 行块注释替换为 3 个空行?

编辑: 我能够通过使用 SableCC 解决我的问题。

【问题讨论】:

  • 为什么需要移除 cmets?也许您应该编写自己的算法。我认为使用正则表达式是不可能的。
  • 我可能会为此编写一个 Perl 脚本。在 Java 中会有点困难。
  • 您使用的是哪个 IDE?有的直接支持这种东西。
  • 如果您不依赖于 Java,您可以使用 sedawk。他们可以在保留行数的同时删除评论

标签: java regex


【解决方案1】:

我还没有完全弄清楚那个正则表达式在做什么,但是如果它匹配整个评论,那么你可以获得匹配的评论,检查它包含多少换行符,然后用那么多换行符替换匹配而不是用空字符串替换它。

【讨论】:

    【解决方案2】:

    如果你设置了正则表达式,你可以试试这个

    ~/(?:/.*?$|\*[^*]*\*/)~
    

    DEMO

    这利用了两个不同的非捕获组

    由于所有 cmets(单行和多行)都必须以 / 开头,这是正则表达式的第一个字符。然后评论可以有另一个/*。这就是交替出现的地方。第一部分 /.*?$ 处理单行 cmets,而第二部分 \*[^*]*\* 匹配多行 cmets。

    如果您的多行 cmets 格式为前导 * 后跟 <space>,如下所示:

    /* mu
    * lti
    * line
    * comment
    */
    

    那么这个 DEMO 应该可以解决问题(我认为在 Java 中一行不能以 * 开头,除非它在注释中)。

    很遗憾,如果没有按照上面的格式设置行距,我还没有找到合适的替代方法来保留行距。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2012-06-18
      • 2018-04-07
      相关资源
      最近更新 更多