Java line separator (evtl nur in TextComponents...)

Mujahiddin

Top Contributor
Frage ist:
Warum ist der Line Separator in Java nicht einheitlich?
Wenn ich in ein JTextArea
Java:
System.lineSeparator()
unter Windows einfüge, muss ich mit der Tastatur zwei Zeichen überbrücken. Drücke ich jedoch meine Enter-Taste, spuckt die Methode
Java:
textArea.getText().contains(System.lineSeparator());
Code:
false
aus. Woran liegt das? Warum ist es nicht einheitlich? Ist das nur bei JTextComponent? Was sind die Richtlinien? Hab im Internet nach bisschen recherchieren nix gefunden.

Grüße!
 
Also wenn du richtig recherchiert hättest, dann hättest du sicher gefunden, dass das mit einem Zeilenumbruch nicht Java-spezifisch ist sonder von der OS abhängt:

Also Linux: "\n"
Windows: "\r\n"


IMO gibt deine Methode false zurück, weil bei einem Druck auf Enter nur ein "\n" eingefügt wird und nicht "\r\n".
 
Das weiß ich selbst auch.
Und unter MacOS ist es "\r".
Aber wenn ich ein JTextArea unter Windows initiiere mit dem Vorgegebenen Text
Code:
"Erste Zeile" + System.lineSeparator() + "Zweite Zeile";
, dann muss ich mit meiner Tastatur zwei Zeichen überbrücken, wenn ich über die Zeile fahre. Wenn ich jedoch selber eine Zeile einfüge, nämlich mit meiner Zeilenseparatortaste namens ENTER, dann gibt die Methode 'contains(System.lineSeparator())'
Code:
false
zurück. Ist die ENTER-Taste der Übeltäter oder wie habe ich das zu verstehen?
 
Du kannst dir doch mal ausgeben lassen was in der Textarea drin steht nachdem du per Enter einen Zeilenumbruch eingefügt hast. Am besten direkt als byte[] Array.
 
Hab im Internet nach bisschen recherchieren nix gefunden.
Also wenn du richtig recherchiert hättest, dann hättest du sicher gefunden, dass das mit einem Zeilenumbruch nicht Java-spezifisch ist sonder von der OS abhängt:
Nach einer kurzen Recherche habe ich herausgefunden, dass der Zeilenumbruch "Java-spezifisch" ist.
In Textkomponenten immer schön '\n' verwenden.

Newlines

There are two properties which deal with newlines. The system property,
Code:
line.separator
, is defined to be platform-dependent, either "\n", "\r", or "\r\n". There is also a property defined in
Code:
DefaultEditorKit
, called [JAPI]javax.swing.text.DefaultEditorKit#EndOfLineStringProperty[/JAPI], which is defined automatically when a document is loaded, to be the first occurrence of any of the newline characters. When a document is loaded,
Code:
EndOfLineStringProperty
is set appropriately, and when the document is written back out, the
Code:
EndOfLineStringProperty
is used. But while the document is in memory, the "\n" character is used to define a newline, regardless of how the newline is defined when the document is on disk. Therefore, for searching purposes, "\n" should always be used. When a new document is created, and the
Code:
EndOfLineStringProperty
has not been defined, it will use the System property when writing out the document.

Note that
Code:
EndOfLineStringProperty
is set on the Document using the
Code:
get/putProperty
methods. Subclasses may override this behavior.
[JAPI]javax.swing.text.DefaultEditorKit[/JAPI]
 

Zurück
Oben