2017-02-16 1 views
-2

Ich arbeite an einer Hausaufgabe, für die ich eine Java-Quelldatei lesen und alle Kommentare daraus entfernen muss. Der Rest des Stylings sollte gleich bleiben.Alle Kommentare aus Java-Code ohne Regex entfernen

Ich habe die Aufgabe bereits mit regex abgeschlossen.

Aber ich freue mich auf erreichen das gleiche ohne Regex zu verwenden.

Beispiel Eingabe

// 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 

Ergebnis

class Student { 

    int studentId; 
    String studentName; 
    String junk = "Hello//hello/*hey"; 

} 

Meine Idee ist jeder Zeile

1) Überprüfen Sie die ersten beiden Zeichen zu lesen

  • wenn es mit // beginnt ==> entfernen Sie die Zeile

  • wenn es mit/* beginnt ==> entfernen Sie alle Linien bis */

2) Ein weiteres Szenario ist die Handhabung

Beispiel - int studentId; // Kommentar oder/* Kommentar */

Kann jemand einen besseren Ansatz dazu bieten?

+0

Anstatt die ersten beiden Zeichen zu prüfen, suchen Sie nach '//' und entfernen Sie dann von diesem Punkt zur neuen Zeile. Selbe Idee für '/ *' außer entfernen bis '* /' –

+0

@HypnicJerk Vielen Dank für die Antwort. Wenn ich die gesamte Textzeile suche, und wenn ich eine String-Deklaration habe wie - String junk = "Hallo // hallo"; Dies könnte zu Problemen führen. – user3451476

+0

@ user3451476 Könnten Sie ein String-Beispiel angeben, wie es aussieht und wie es aussehen soll? –

Antwort

6

Wenn Sie etwas anderes als eine Regex versuchen wollen, dann ist eine Möglichkeit eine Zustandsmaschine. Es gibt mindestens fünf Zustände: Start, Im normalen Code, In // Kommentar, In/* ... */Kommentar und Stop.

Start im Startzustand. Jeder Zustand verarbeitet die Eingabe, bis etwas zu einem anderen Zustand wechselt. Der Stop-Status beendet die Verarbeitung und führt alle notwendigen Schritte zum Aufräumen aus, z. B. das Schließen von Dateien.

Denken Sie daran, dass Sie schlecht gebildet Eingang zu handhaben müssen, und auch hinterhältig Eingang:

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

Ich überlasse es Ihnen, herauszufinden, wie das zu handhaben.

Verwandte Themen