Editor - Zeilenumbrüche checken

billbill

Mitglied
Hallo zusammen,

ich programmiere grade einen Editor und ich habe die Aufgabe, eine Fehlermeldung auspucken zu lassen falls eine Datei nicht korekt geladen werden kann (wegen den Zeilenumbrüchen, Linux="\n" und windows="\r").
Also wenn eine Datei in Windows gespeichert aber in Linux geöffnet wird und umgekehrt.
Ich habe folgendes gemacht.

Java:
public class ZeilenumbruchKonvention {
     /**
     * Das Textpane vom MainWindow.
     */
    private JTextPane textpane;
    String BS;
    String Zeilenumbruch;
    
    public String ermitleZeilenumbruch() {
		BS = System.getProperty("os.name");
                if (BS.equals("Linux")){
                    Zeilenumbruch="\n";
                }
                else if(BS.substring(0,6).equals("Windows")){
                    Zeilenumbruch="\r";
                }
    return Zeilenumbruch;
    }
    
    public int vergleicheZeilenUmbruch(String Zeilenumbruch,JTextPane text){
        String zeilen[];
        zeilen=text.getText().split(Zeilenumbruch);
        int ergebnis=1;
        if (zeilen[1]==null) {
            ergebnis=0;
        }
        else;
        System.out.println(ergebnis);
        return ergebnis;
    }
}

Java:
                    String Zeilenumbruch = this.ZK.ermitleZeilenumbruch();
                    int ZeilenUmbruchKorrekt=this.ZK.vergleicheZeilenUmbruch(Zeilenumbruch, Inhalt);
                    if (ZeilenUmbruchKorrekt==0){
                       JOptionPane.showMessageDialog(Inhalt, "Textformat nicht korrekt", actCom, JOptionPane.ERROR_MESSAGE);
                    }

Also der Text wird gesplitet sofern der Zeilenumbruch stimmt, sonst nicht.
Dementsprecht wird 1 oder 0 zurückgegeben falls zeilen[1] existiert und gehandelt.

Leider bekomm ich eine NullPointerException. Ich checke nicht wieso.

Ist mein Programm sonst ok? Was meint ihr?

Danke schonmal,

Grüsse
billbill
 

Ghostfish

Mitglied
Hm. Warum prüfst du denn zeilen[1] und nicht zeilen oder zeilen[0]?

Variablennamen schreibt man klein.

Den System-Zeilenumbruch kann man IMHO direkt abfragen.

Aus Usability-Gründen halte ich es für klüger, die Zeilenumbrüche beim Laden des Textes einfach umzuwandeln statt eine Fehlermeldung auszugeben.
 

billbill

Mitglied
Ach so, verstanden. Wenn auch fehlerträchtig wenn der Text nur aus einer zeile besteht.

Bei Windows ist der Zeilenumbruch übrigens "\r\n".
genau, wenn er aus einer zeile, also zeilen[0] besteht, bedeutet das, dass der zeilenumbruch falsch ist und die fehlermeldung erscheint

du hast recht "\r\n" ist für windows, danke

irgend eine ahnung warum die exception auftaucht?
 

xehpuk

Top Contributor
Du hast uns nicht gesagt, wo der Fehler auftritt. Ich tippe mal auf diese Zeile:
[JAVA=22] zeilen=text.getText().split(Zeilenumbruch);[/code]
Code:
Zeilenumbruch
wird nämlich
Code:
null
sein. Etwas wie
Code:
BS.substring(0,6).equals("Windows")
wird nie
Code:
true
ergeben, denn "Windows" hat sieben, nicht sechs Zeichen.
Wenn Java 7 vorhanden, verwende [JAPI]System#lineSeparator()[/JAPI], ansonsten
Code:
System.getProperty("line.separator")
.

Code:
zeilen[1]==null
ergibt auch keinen Sinn. Greifst du auf einen nicht existierenden Index eines Arrays zu, wird nicht
Code:
null
zurückgegeben, sondern es fliegt eine [JAPI]ArrayIndexOutOfBoundsException[/JAPI].
Im Übrigen werden durch deine Methode Windows-Zeilenumbrüche auch unter Linux und Mac OS angenommen.

Des Weiteren sei auf den primitiven Datentyp
Code:
boolean
verwiesen. Die Methode sollte nämlich keinen
Code:
int
zurückgeben.
 
G

Gelöschtes Mitglied 17508

Gast
Hallo!

Ich weiss, dass das jetzt nicht soviel ausmacht, aber als kleine Anmerkung:

Wenn die Methode vergleicheZeilenUmbruch true oder false zurückliefern sollte, dann wäre es auch gleich angebracht, diese Methode anders zu benennen, zumindest vll. mit einem vorangestellten: isxxxx

Java:
    public int isvergleicheZeilenUmbruch(String Zeilenumbruch,JTextPane text){
        String zeilen[];
        zeilen=text.getText().split(Zeilenumbruch);
        boolean ergebnis=true;
        if (zeilen[1]==null) {
            return ergebnis;
        }
        else {
        System.out.println(ergebnis);
        ergebnis=false;
        return ergebnis;
    }

So in der Art zB.

mfG
 

billbill

Mitglied
Du hast uns nicht gesagt, wo der Fehler auftritt. Ich tippe mal auf diese Zeile:
[JAVA=22] zeilen=text.getText().split(Zeilenumbruch);[/code]
Code:
Zeilenumbruch
wird nämlich
Code:
null
sein. Etwas wie
Code:
BS.substring(0,6).equals("Windows")
wird nie
Code:
true
ergeben, denn "Windows" hat sieben, nicht sechs Zeichen.
Wenn Java 7 vorhanden, verwende [JAPI]System#lineSeparator()[/JAPI], ansonsten
Code:
System.getProperty("line.separator")
.

Code:
zeilen[1]==null
ergibt auch keinen Sinn. Greifst du auf einen nicht existierenden Index eines Arrays zu, wird nicht
Code:
null
zurückgegeben, sondern es fliegt eine [JAPI]ArrayIndexOutOfBoundsException[/JAPI].
Im Übrigen werden durch deine Methode Windows-Zeilenumbrüche auch unter Linux und Mac OS angenommen.

Des Weiteren sei auf den primitiven Datentyp
Code:
boolean
verwiesen. Die Methode sollte nämlich keinen
Code:
int
zurückgeben.

Ach so, ich wusste nicht das ich den line.seperator direkt entnehmen kann.
Die Fkt lautet jetzt

Java:
    public String ermitleZeilenumbruch() {
		zeilenumbruch = System.getProperty("line.separator");
    return zeilenumbruch;
    }

Die 2. Fkt hat den Rückgabewert boolean statt int.
Die Exception kommt genau an der stelle die du getippt hast, nach wie vor.

Ist das nicht so dass der ganze Text in Zeilen[0] gespeichert wird wenn das split-Argument nicht vorkommt?

Wie kann ich denn checken ob zeilen[1] existiert?
 

xehpuk

Top Contributor
Ist das nicht so dass der ganze Text in Zeilen[0] gespeichert wird wenn das split-Argument nicht vorkommt?
Ja.

Wie kann ich denn checken ob zeilen[1] existiert?
Code:
zeilen.length > 1

Was mir noch auffällt: Eine Textkomponente sollte normalerweise nur '\n' als Zeilenumbruch haben (siehe [JAPI]DefaultEditorKit[/JAPI]). Wie fügst du Text ein? Was kriegst du bei
Code:
textPane.getDocument().getProperty(DefaultEditorKit.EndOfLineStringProperty)
zurück?
 

billbill

Mitglied
Es kommt eine neue NullPointerException wenn ich das ausführe.
Meine "alte" Exception ist jedenfalls aufgehoben.

Text wird in einem JTextPane geladen oder neu geschrieben, den entnehme ich einfach mit einem getText().

Also mir wurde gesagt dass es zu jedem Betriebssystem einen entsprechenden Zeilenumbruch gibt und das sollte halt behandelt werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Class File Editor -> Source not found Allgemeine Java-Themen 4
S Java öffnet immer im editor Allgemeine Java-Themen 1
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
J JDK installieren Das Jdk funtioniert beim Editor nicht. Allgemeine Java-Themen 3
B Eclipse Ekit-Editor einfügen Allgemeine Java-Themen 0
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
S BMI Rechner mit eclipse Visual Editor (Seperates Fenster) Allgemeine Java-Themen 7
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
A BlueJ Java Frame Java Editor --> Bluej / String title Allgemeine Java-Themen 8
C Unterschiedliches Verhalten Editor und deployte Application Allgemeine Java-Themen 3
achillesat Rich Text Editor Allgemeine Java-Themen 2
S Textdatei mit externen Editor öffnen Allgemeine Java-Themen 8
F Ordner auslesen und in Editor ausgeben Allgemeine Java-Themen 7
MQue Renderer und Editor Allgemeine Java-Themen 2
Developer_X Paint Editor Programm Allgemeine Java-Themen 3
D mit Java das Programm "Editor" öffnen Allgemeine Java-Themen 7
T Der Java-Editor kompiliert nicht... Allgemeine Java-Themen 7
M Visual Editor für Web und RCP Allgemeine Java-Themen 6
B Text-Editor Komponente Allgemeine Java-Themen 2
G problem mit java-editor Allgemeine Java-Themen 4
G editor area.eclipse rcp Allgemeine Java-Themen 19
I Wie externen Editor Starten Allgemeine Java-Themen 2
S HTML-Editor schreiben Allgemeine Java-Themen 6
G emf editor. Allgemeine Java-Themen 6
A text in editor speichern Allgemeine Java-Themen 2
S Java Editor einstellungen Allgemeine Java-Themen 4
S einfachen editor für source code Allgemeine Java-Themen 13
G Plugin (Visual Editor) in Eclipse einfügen Allgemeine Java-Themen 2
J java beans property editor Allgemeine Java-Themen 3
F Eclipse Visual Editor Probleme Allgemeine Java-Themen 8
N Probleme mit Java Editor - Funktioniert gar nicht Allgemeine Java-Themen 4
S Java Editor Allgemeine Java-Themen 10
N Suche HTML WYSIWYG Editor als Komponente Allgemeine Java-Themen 2
T Java Editor, Java Allgemeine Java-Themen 6
K Welchen Editor? Allgemeine Java-Themen 31
M Bitte Testen: Mein Multi-File Editor Allgemeine Java-Themen 30
E Visueller Editor für Druckformulare - Plugin für Eclipse Allgemeine Java-Themen 2
S welchen editor Allgemeine Java-Themen 5
S Text Editor Allgemeine Java-Themen 2
8 Editor für Programmablaufpläne Allgemeine Java-Themen 9
S Struktogramm-Editor Allgemeine Java-Themen 12
C Grafik Editor in Java Allgemeine Java-Themen 2
M Problem mit Eclipse und dem Visual Editor Allgemeine Java-Themen 2
S Welchen Editor soll man für Graphische lösungen benutzen Allgemeine Java-Themen 2
S Vielleicht OT aber dringend: Java Editor JAMBA gesucht Allgemeine Java-Themen 2
S Eigener Editor Allgemeine Java-Themen 7
O standard text editor starten Allgemeine Java-Themen 7
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
turmaline [HttpServletResponse] Zeilenumbrüche in IE Allgemeine Java-Themen 3
T Input/Output Zeilenumbrüche beim exportieren in eine Textfile Allgemeine Java-Themen 7
J Zeilenumbrüche in eingelesenen Dateien (lokal & ftp) Allgemeine Java-Themen 5
M XSTREAM und Zeilenumbrüche Allgemeine Java-Themen 4
V Zeilenumbrüche und regex Allgemeine Java-Themen 2
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
I Filewriter ignoriert Zeilenumbrüche Allgemeine Java-Themen 4
L Schlüsselworte Wie kann ich am Besten ein LocalDate zwischen Anfangs und EndDate checken Allgemeine Java-Themen 10
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
B systemzeit checken Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben