Java: Kommentare aus Quellcode entfernen

C

ChackZz

Gast
Hallo,

ich möchte ein Programm schreiben, welches mit "//" eingeleitete Kommentare aus einem in einer .txt-Datei gespeicherten Programmcode löscht. Dabei möchte ich die Datei zeichenweise einlesen.

Ich habe bereits einen FileReader umgesetzt:
Code:
import java.io.*;

public class CommentDelete {
	

public static void main(String[] args) {
   FileReader f;
   int c;
		
   try {
	f = new FileReader("helloworld.txt");
		while ((c = f.read()) !=-1) {
			System.out.println((char)c);
		}
		f.close();
	} catch (IOException e) {
		System.out.println("Fehler beim Lesen der Datei");
	}
    	
 }
    
    
}

Zwei Probleme:
Das kleine, die Ausgabe erfolgt in der Konsole, jedoch ist jedes Zeichen in einer eigenen Zeile, was nicht unbedingt gewollt ist. Ich steh gerade so dermaßen auf dem Schlauch, dass ich selbst diesen Fehler nicht finde.. :freak:

Das große Problem: Ich weiß einfach nicht, wie ich vom FileReader aus soweit komme, a) Kommentare zu erkennen (klar, mit Sicherheit durch //) und b) diese zu löschen.

Kann mir da eventuell jemand bei helfen?

Ich wäre sehr dankbar.
 
Zuletzt bearbeitet von einem Moderator:
1. du benutzt println ... was wohl für printline steht -> nach ausgabe ein line break, nach alternativen umsehen ;)

2. kannst du das am besten zeilenweise in ein array einlesen und dann in dem string nach der stelle mit dem // suchen und dann alles danach löschen

kann leider kein java, daher keine codebeispiele von mir :)
 
1. wäre dann einfach nur print (ohne das ln) ;)

2. ganz einfach. zeile auslesen, klasse string bietet methode startswith() -> die kannst du verwenden! gibt true oder false zurück. musst du dann hald in ne bedingung einbauen.
 
wenn du die zeichen schon zeichenweise einliest und auswertest, kannst du beim auffinden vom ersten '/' die ausgabe unterbrechen, dann beim zweiten '/' unterbrochen lassen bis ein zeilenumbruch kommt.
falls nach dem ersten '/' kein zweiter kommt, einfach vor dem aktuellen zeichen das ausgelassene '/' vorschieben
 
Um zeilenweise zu lesen kannst du auch den BufferedReader und seine Methode readLine() verwenden.
 
An Alle: Danke für die Vorschläge mit dem readLine(), allerdings sollen wir zwingend zeichenweise einlesen. Leider.

ven- schrieb:
wenn du die zeichen schon zeichenweise einliest und auswertest, kannst du beim auffinden vom ersten '/' die ausgabe unterbrechen, dann beim zweiten '/' unterbrochen lassen bis ein zeilenumbruch kommt.
falls nach dem ersten '/' kein zweiter kommt, einfach vor dem aktuellen zeichen das ausgelassene '/' vorschieben
.

Danke, vielleicht noch ein kleiner Tipp, wie genau ich es auswerte und die ausgabe unterbreche? Ich brüte da jetzt schon vergleichsweise lang dran und habe irgendwie wirklich eine Blockade..
 
Du kannst es über Zustände lösen oder vereinfacht mit ner Zählvariable, die gleichzeitig als Sperrvariable für die Ausgabe fungiert.
Beim ersten / auf 1 setzen und und wenn der Zähler >=1 die normale Ausgabe unterbrechen. Wenn dann beim nächsten Durchgang der Zähler auf 1 ist, aber kein / folgt, Zähler wieder auf 0, wodurch die Ausgabe wieder aktiviert wird und bevor die normale Ausgabe weitergeht ein / ausgeben, was ja den Durchgang vorher nicht gemacht wurde. Wenn doch ein / folgt, Zähler auf 2, wodurch die Ausgabe blockiert wird und wenn der Zähler auf 2 ist die Ausgabe erst wieder aktivieren, wenn ein Zeilenumbruch gelesen wird.
Ums nicht zu einfach zu machen, habe ich mal noch keine Codebeispiele gemacht, aber wenn du nicht weiterkommst, kann ichs ja noch ein wenig mehr ausführen.
 
Zurück
Oben