String aus Textarea in Zeilen splitten

Erstelle gerade eine Anwendung mit einem Web Frontend (Spring Boot) welche ein PDF zurückliefert (Apache PDFBox)

Jedenfalls muss ich hier einen String, der in einer HTML-Textarea eingegeben wurde in einzelne Zeilen zerlegen, weil sonst PDFBox rumjammert.

java.lang.IllegalArgumentException: U+000D ('controlCR') is not available in this font ...

Also erstmal:

text.split("\n"); 

geht nicht, weil das controlCR eben drin bleibt.

text.split("\\r?\\n"); 

geht, allerdings sieht es so unhandlich aus, dass ich mich frage, gibts da auch eine andere Lösung oder ist das die richtige Art und Weise wie man das halt so macht. Charset für das HTML ist übrigens UTF-8, falls das einen Unterschied machen sollte.

Sieht eigentlich OK aus. Vielleicht würde auch text.split(System.lineSeparator()) gehen, aber es ist (mir) nicht ganz klar, ob dieser String bzw. seine Zeilenumbrüche wirklich OS-abhängig sind (oder ob die Quelle nicht z.B. bei jedem OS einfach \r\n verwendet…)

Soweit ich weiß, kann auch mal CR LF (0d0a) vorkommen. Ich würde zunächst alle LF (0a) aus dem String entfernen und dann schlicht mit CR (0d) splitten.

Betriebssystemabhängig war es evtl. mal, aber das dürfte lange her sein.

Ich Zitiere mal aus System.lineSeparator()

On UNIX systems, it returns {@code „\n“}; on Microsoft Windows systems it returns {@code „\r\n“}.

Ich entwickle auf Linux, daher müsste laut JavaDoc auch nur „\n“ als lineSeprator zurückkommen. Fakt ist aber auch, dass sich da im Browser noch ein „\r“ einschleicht. Vielleicht möchte Firefox ja die platformübergreifende Kompatibilität zu Windows wahren.

Dennoch werde ich wohl @anon19643277 Empfehlung nachgehen und einfach alle CR entfernen, nicht dass da noch irgendwo ein einzelner steht und Ärger macht. Das funktioniert auch soweit ich das beurteilen kann.

text.replaceAll("\\r", "").split("\\n")

Hmm… wann benötigt man denn ein Linefeed ohne Carriagereturn? Evtl. nur dann, wenn man mehrere Zeilen überspringen will. Allerdings verwendet man dazu in Textdateien auch eher ein Carriagereturn, welches ein Linefeed beinhaltet. Wie bei einer Schreibmaschine - man führt per Hebel grundsätzlich immer beides aus, nur wenn man bereits am Anfang einer Zeile steht, geht es halt nicht weiter zurück. Wer dir also einzelne Linefeeds in Textdateien reinfriemelt, will dich nur ärgern - also gar nicht beachten. :wink: