我有一个java程序,它读取文本文件并添加和删除部分内容。它也可以在文本文件中使用内联和多行注释。
例如,将跳过以下部分
// inline comment
/*multiple
*comment
*/
我遇到了多个评论关闭的情况,例如
/**
*This
* is
*/
* a multiple line comment
*/
在这种情况下,只要出现第一个评论结束标记,就会停止评论的跳过,并在输出文件中打印该行的其余部分。
以下是我这样做的方式
boolean commentStart = false;
boolean commentEnd = false;
if(line.trim().indexOf("/*") != -1) { // start
commentStart = true;
}
if(line.trim().indexOf("*/") != -1 && commentStart) { // closed
commentEnd = true;
commentStart = false;
}
if(commentStart || (!commentStart && commentClosed)) {
//skip line
}
有任何帮助吗?谢谢。
答案 0 :(得分:0)
除非您将自己限制为嵌套注释,否则您的文件格式不正确。如果没关系,那么您需要定义 评论的内容,如果不是只有/*
和*/
之间的内容。在您的示例中,您的评论定义似乎是以*/
,/*
或 *
开头的任何行。正则表达式:^[/\\\b]?*
。
如果可行,我只是跳过符合正则表达式的行。
答案 1 :(得分:0)
我有一个Perl正则表达式,它会从Java中删除引用字符串和所有内容的注释。它唯一没有理解的是用\ uXXXX序列做出的评论或引用。
sub strip_java_comments_and_quotes
{
s!( (?: \" [^\"\\]* (?: \\. [^\"\\]* )* \" )
| (?: \' [^\'\\]* (?: \\. [^\'\\]* )* \' )
| (?: \/\/ [^\n] *)
| (?: \/\* .*? \*\/)
)
!
my $x = $1;
my $first = substr($x, 0, 1);
if ($first eq '/')
{
# Replace comment with equal number of newlines to keep line count consistent
"\n" x ($x =~ tr/\n//);
}
else
{
# Replace quoted string with equal number of newlines to keep line count consistent
$first . ("\n" x ($x =~ tr/\n//)) . $first;
}
!esxg;
}
我将把它转换为Java:
Pattern re = Pattern.compile(
"( (?: \" [^\"\\\\]* (?: \\\\. [^\"\\\\]* )* \" )" +
"| (?: ' [^'\\\\]* (?: \\\\. [^'\\\\]* )* ' )" +
"| (?: // [^\\n] *)" +
"| (?: /\\* .*? \\*/)" +
")", Pattern.DOTALL | Pattern.COMMENTS);
Matcher m = Pattern.matcher(entireSourceFile);
Stringbuffer replacement = new Stringbuffer();
while (m.find())
{
String match = m.group(1);
String first = match.substring(0, 1);
m.appendReplacement(replacement, ""); // Beware of $n in replacement string!!
if (first.equals("/"))
{
// Replace comment with equal number of newlines to keep line count consistent
replacement.append( match.replaceAll("[^\\n]", ""));
}
else
{
// Replace quoted string with equal number of newlines to keep line count consistent
// Although Java quoted strings aren't legally allowed newlines in them
replacement.append(first).append(match.replaceAll("[^\\n]", "")).append(first);
}
}
m.appendTail(replacement);
类似的东西!