【发布时间】:2017-02-16 21:04:03
【问题描述】:
我正在做一个家庭作业,我需要读取一个 java 源文件并从中删除所有 cmets。其余样式应保持不变。
我已经使用正则表达式完成了任务。
但我希望在不使用正则表达式的情况下完成同样的任务。
示例输入
// My first single line comment
class Student {
/* Student class - Describes the properties
of the student like id, name */
int studentId; // Unique Student id
String studentName; // Name of the student
String junk = "Hello//hello/*hey";
} // End of student class
结果
class Student {
int studentId;
String studentName;
String junk = "Hello//hello/*hey";
}
我的想法是阅读每一行
1) 检查前两个字符
如果它以 // ==> 开头,则删除该行
如果它以 /* ==> 开头,则删除 */ 之前的所有行
2) 另一个场景正在处理
示例 - int studentId; // 评论或 /* 评论 */
有人可以提供更好的方法吗?
【问题讨论】:
-
不检查前两个字符,而是搜索
//,然后从该点删除到新行。/*的想法相同,但删除直到*/ -
@HypnicJerk 感谢您的回复。如果我搜索整行文本,并且如果我有一个字符串声明,例如 - String junk = "Hello//hello";这可能会导致问题正确
-
@user3451476 您能否提供一个字符串示例,说明它的外观以及您希望它的外观
-
@NickDiv 我已经更新了问题
-
显然,您的想法行不通,因为您根本没有考虑字符串文字。请记住,在字符串文字中,字符可以通过反斜杠进行转义。哦,那
\uxxxx序列呢?你也应该正确处理这些吗?我怀疑您是否真的“使用正则表达式完成了任务”。但是,如果您拥有并理解基于正则表达式的解决方案,那么手动实现完全相同的逻辑有什么难的呢?