Java Zeilenumbruch?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Es gibt 2 zeichen um eine neue zeile zu markiren. LF und CR.

Windows benutzt bei jeder zeilen endung CRLF, und linux/macOS X benutzt nur LF. Früher hat macOS CR benutzt.

In windows müsstest du also machen \r\n.

Kann gut sein dass deine IDE denkt dass das einmal ein unix zeilenumbruch sein soll, und einmal ein macOS zeilenumbruch.

Im Zweifelsfall ersetzt du einfach deinen Zeilenumbruch durch System.lineSeparator(), das wählt automatisch den richtigen zeilenumbruch für deine umgebung.


Regex20921518 
Fragesteller
 23.05.2021, 18:39

Ok, aber was mich nur irritiert, ist folgendes: Schreibe ich doch nur \n, müsste doch der Text direkt unten drunter stehen, da man ja nicht auf den Beginn der Zeile gesetzt hatte. Stattdessen steht der Text aber zu Beginn der Zeile direkt darunter.

0
jort93  23.05.2021, 18:40
@Regex20921518

Das ist einfach eine Konvention. Zeilen die an der selben stelle beginnen gibt es bei ner Schreibmaschine, aber nicht in computern, dementsprechend spart man sich das Zeichen.

Egal ob CRLF, CR oder LF, alle markieren eine neue Zeile am Anfang.

Von der bedeutung her würde man so denken, CR bringt dich an den anfang, LF in ne neue zeile, aber in der praxis landet man immer in ner neuen zeile und am anfang.

1
jort93  23.05.2021, 18:43
@Regex20921518

Ja du solltest aber richtig lesen...

der Unterschied damals war
[...]
von der Schreibmaschinenzeit und ist noch heute da

Heute gibt es keinen unterschied mehr, früher, als man sich ascii ausgedacht hat, wollte man einen haben.
Das einzige was bleibt sind die beiden Zeichen.

2
Regex20921518 
Fragesteller
 23.05.2021, 18:44
@jort93

Ok, danke. Und was hat es mit "LF" und "CR" auf sich? Vermutlich mit ASCII, aber ich kenne mich da nicht so aus...

0
Regex20921518 
Fragesteller
 23.05.2021, 18:48
@jort93

Ok, also drücken die beiden ob alleine oder zusammen einfach nur in Java den Umbruch aus?!

0
jort93  23.05.2021, 18:51
@Regex20921518

Korrekt.

Es sind im endeffekt nur zeichen, was die umgebung damit macht ist der umgebung überlassen. Aber den IDE's ist das egal ob du nun CR, LF oder CRLF schreibst.

Die meißten non printable ascii zeichen die du da am anfang siehst werden kaum noch benutzt https://web.itu.edu.tr/sgunduz/courses/mikroisl/ascii.html

Damals wusste man ja noch nicht wie computer in 60 jahren funktionieren. in dem zeichensatz ist auch so spaß wie vertikale tabs undso drinnen, die benutzt kein programm heute.

1
Regex20921518 
Fragesteller
 23.05.2021, 18:52
@jort93

Mich irritiert halt gerade nur dieses: bei \r\n steht alles direkt unten drunter, warum gibt es aber eine Lücke dazwischen bei umgekehrter Schreibweise?!

0
jort93  23.05.2021, 18:54
@Regex20921518

Habe ich auch schon beantwortet.

Kann gut sein dass deine IDE denkt dass das einmal ein unix zeilenumbruch sein soll, und einmal ein macOS zeilenumbruch.

Musst die Antwort schon lesen.

\r\n erzeugt LFCR. Das ist also kein windows zeilenumbruch, sondern ein unix Zeilenumbruch(LF) und ein macOS Zeilenumbruch(CR).

Ich gebe dir mal einen tipp, in java schreiben 99.9% der leute für einen zeilenumbruch einfach /n und gut ist.

1
Regex20921518 
Fragesteller
 23.05.2021, 18:58
@jort93

Ja, danke. Mich hat, wo du gerade auf deine vorherige Antwort verweist, nur irritiert, dass die IDE ja eigentl. merken müsste, auf welchem Betriebssystem ich operiere. Sprich, dass sie nur von Windows ausgeht und nicht von Unix oder macOS. Also erzeugt der Unix Zeilenumbruch \r\n eine Lücke dazwischen und die Schreibweise \n\r nicht? Das würde dann Sinn ergeben! LG

0
jort93  23.05.2021, 19:01
@Regex20921518

Bevor du da mit \n\r oder so hantierst, mach einfach System.lineSeparator(), das wählt die richtige Zeilenendung für deine umgebung.

\r\n sollte keine Lücke erzeugen(unter windows), \n\r wahrscheinlich.

Nochmal

Windows benutzt bei jeder zeilen endung CRLF, und linux/macOS X benutzt nur LF. Früher hat macOS CR benutzt.
0
Regex20921518 
Fragesteller
 23.05.2021, 19:03
@jort93

Genau, also du bist auch der Meinung, das bei Unix noch eine Lücke erzeugt wird? Und bei macOS nicht? Das lässt mir keine Ruhe! Ich werde aber deinen Tipp beherzigen!

0
jort93  23.05.2021, 19:05
@Regex20921518

Nein, bin ich nicht.

Windows benutzt bei jeder zeilen endung CRLF, und linux/macOS X benutzt nur LF. Früher hat macOS CR benutzt.

/r erzeugt CR, /n erzeugt LF

Was verstehst du dadran nicht?

Viele IDE's unterstützen mehrere Zeilenendungen. Dementsprechend funktioniert ein einzelnes /n eigentlich immer als zeilenendung.

0
Regex20921518 
Fragesteller
 23.05.2021, 19:06
@jort93

Würde halt nur gerne wissen, wie man den Unterschied, eine Zeile mehr erklären kann...

0
jort93  23.05.2021, 19:08
@Regex20921518

Weil \n\r die zeichenfolge LFCR erzeugt. \n\r erzeugt die zeichenfolge CRLF.

LFCR sind zwei zeilenendungen(eben eine aus unix und eine aus macOS), CRLF nur eine.

Zum dritten mal schon jetzt.

1
jort93  23.05.2021, 19:11
@jort93

"\r\n erzeugt die zeichenfolge CRLF" soll das heißen, verschrieben.

0
Regex20921518 
Fragesteller
 23.05.2021, 19:13
@jort93

Also ist einfach ja nur einprogrammiert, dass CRLF eine erzeugt und LFCR 2, oder?!

0
jort93  23.05.2021, 19:30
@Regex20921518

Das kommt auf das Programm an...

Das hat mit java nichts zu tun, wie uint richtig erkannt hat.

1
  1. Die Ausgabe ist abhängig vom Programm
  2. Je nach Programm, welches die Ausgabe anzeigt, kann es sein, dass dieses Programm den System-Spezifischen Line-Separator verwendet oder irgendwas eigenes macht.
  3. In deinem Fall der Ausgabe in eine Windows-Console wird \r\n, \r und \n innerhalb der Console als Zeilenumbruch gewertet. \r\n wird gefunden und es erfolgt genau EIN Zeilenumbruch.
  4. In deinem Fall der Ausgabe in eine Datei hast du folgende Kombination angegeben: \n\r. Damit wird \r\n nicht gefunden, \n wird gefunden und \r auch. Damit sind das 2 Zeilenumbrüche.

Ich habe das Programm Notepad++ mal benutzt:

Bild zum Beitrag

 - (Computer, Technik, programmieren)

Regex20921518 
Fragesteller
 25.05.2021, 08:50

Danke. Ich hatte Eclipse verwendet.

0

Das hat mit Java an sich grundsätzlich nichts zu tun, sondern nur mit der Umgebung, in der das Programm läuft.

Verschiedene Betriebssysteme, Terminalemulatoren, usw. werden unterschiedliche Ergebnisse liefern.

Mit Java hat das nichts zu tun.

Woher ich das weiß:Berufserfahrung

Regex20921518 
Fragesteller
 23.05.2021, 18:33

Ja und wie kann man das erklären? Warum bleibt beim 2.Beispiel der Text nicht in der 2. Zeile, sondern geht in die 3.?

0
uint8  23.05.2021, 18:39
@Regex20921518

Weil dein Terminal es so handhabt. Das hat nichts mit Java zu tun!

Guck dir die Einstellungen oder die Dokumentation deines Terminalemulators an. Ich kann nicht wissen, welche der hunderten verfügbaren du nutzt und wie die sich alle verhalten.

0
Regex20921518 
Fragesteller
 23.05.2021, 18:40
@uint8

Ich schreibe nichts im Terminal, sondern in eine txt Datei....

0
uint8  23.05.2021, 18:54
@Regex20921518

Dann hängt es davon ab, wie der Texteditor damit umgeht. Dabei gibt es ebenfalls X Möglichkeiten.

0

Offensichtlich bewirkt \r am Anfang der Zeile einen Zeilenumbruch.


Regex20921518 
Fragesteller
 23.05.2021, 18:32

Ja und? Dann müsste es aber immer noch in der selben Zeile unten drunter sein...

0