2017-02-16 2 views
-2

Я работаю над домашним заданием, для которого мне нужно прочитать исходный файл java и удалить все комментарии от него. Остальная часть стиля должна оставаться прежней.Удалить все комментарии от java-кода без regex

Я уже выполнил задачу с помощью регулярного выражения.

Но я ищу выполнить то же самое без использования регулярных выражений.

Пример ввод

// 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; // Комментарий или/* Комментарий */

Может ли кто-нибудь лучше подойти к этому?

+0

Вместо проверки первых двух символов выполните поиск '//', а затем удалите из этой точки новую строку. Такая же идея для '/ *' кроме удаления до '* /' –

+0

@HypnicJerk Спасибо за ответ. Если я ищу всю строку текста, и если у меня есть объявление String, например - String junk = "Hello // hello"; Это может вызвать проблемы – user3451476

+0

@ user3451476 Не могли бы вы представить пример строки, как это выглядит и как вы хотите выглядеть так: –

ответ

6

Если вы хотите попробовать что-то другое, кроме регулярного выражения, то одна из возможностей - это конечный автомат. Есть как минимум пять состояний: Start, In normal code, In // comment, In/* ... */comment и Stop.

Начало в исходном состоянии. Каждое состояние обрабатывает входные данные до тех пор, пока не дойдет до того, что приведет к переключению в другое состояние. Состояние «Стоп» завершает обработку, делая все необходимые процедуры, такие как закрытие файлов.

Помните, что вам нужно будет обрабатывать плохо сформированный ввод, а также подлый вход:

System.out.println("A Java comment may start with /* and finish with */"); 

Я оставлю вас, чтобы решить, как справиться с этим.

Смежные вопросы