Eingegebenen Text Zeile für Zeile ausgeben lassen

  • Themenstarter Themenstarter Gelöschtes Mitglied 67123
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 67123

Gast
Mit dem Code kann ich ein Wort Buchstabe für Buchstabe ausgeben lassen:
Java:
for (char ch : string.toCharArray()) {
    System.out.println(ch);
}
Doch was, wenn ich z. B. folgenden Text eingebe und den dann Zeile für Zeile ausgeben lassen möchte:
Code:
Das
ist
ein
test
Text
Hier soll nicht alles auf einmal ausgegeben werden, sondern Zeile für Zeile:
Java:
String[] inputLineSeparation = string.split(System.getProperty("line.separator"));
Doch wie kann ich das jetzt richtig umsetzen? Die Liste habe ich durch inputLineSeparation ja schon, aber den Rest weiß ich leider nicht umzusetzen. Ich stelle mir aber vor, dass das Umsetzen ähnlich wie mit der Schleife mit .toCharArray() ist.

Danke!
 
System.out.println setzt ans Ende jeder Ausgabe einen Zeilenumbruch. Also jede weitere Ausgabe erfolgt auf einer neuen Zeile. Du kannst also mit dem String-Array genauso verfahren wie mit dem Char-Array in deinem ersten Beispiel.
 
System.out.println setzt ans Ende jeder Ausgabe einen Zeilenumbruch. Also jede weitere Ausgabe erfolgt auf einer neuen Zeile. Du kannst also mit dem String-Array genauso verfahren wie mit dem Char-Array in deinem ersten Beispiel.
Nicht dass ich das falsch erklärt habe. Mit dem Code kann ich mir die Liste der Wörter ausgeben, ja, aber ich meinte eigentlich, dass ich jedes Wort einzeln ausgegeben lassen möchte. Aktueller Code:
Java:
 String[] inputLineSeparation = string.split(System.getProperty("line.separator"));
for (String str : inputLineSeparation) {
     System.out.println(str);
 }
Momentaner Output:
Code:
[Das
ist
ein
test
Text]
So soll es aussehen:
Code:
Das
// nächster Output
ist
// nächster Output
ein
// nächster Output
test
// nächster Output
Text
Ich hoffe, ich konnte das jetzt besser verdeutlichen. 😄 Oder ich habe es einfach noch nicht richtig umgesetzt.
 
Was ist denn der genaue Inhalt von string? Kann es sein, dass in der Variable bereits das drin steht, was Du da an Ausgabe bekommst? Das Problem scheint zumindest vorher zu sein.
Das hätte ich dazuschreiben müssen. In einem TextField (JavaFX) steht Folgendes:
1664647544852.png
Und dieser Text soll Zeile für Zeile ausgegeben werden. Also erst wird "Das" ausgegeben, dann "ist" ... und zum Schluss "Test".
Quasi wie:
Java:
System.out.println("Das");
System.out.println("ist");
System.out.println("ein");
System.out.println("test");
System.out.println("Text");
 
Bitte gib genau an, was Du da hast. Ich habe zum einen den Verdacht, dass die Aussage nicht stimmig ist und zum anderen ist immer der Code wichtig: Wie greifst Du auf was zu? Was ist in der Variable string? Wie ist diese deklariert worden?

Wieso erscheint mir Deine Aussage nicht stimmig zu sein?
TextField ist in JavaFX für einzelne Zeilen:
Text input component that allows a user to enter a single line of unformatted text. Unlike in previous releases of JavaFX, support for multi-line input is not available as part of the TextField control, however this is the sole-purpose of the TextArea control.

Zumindest ich kann derzeit / weiterhin nicht nachvollziehen, was Du genau machst und daher kann ich Dir leider nicht weiterhelfen.
 
Bitte gib genau an, was Du da hast. Ich habe zum einen den Verdacht, dass die Aussage nicht stimmig ist und zum anderen ist immer der Code wichtig: Wie greifst Du auf was zu? Was ist in der Variable string? Wie ist diese deklariert worden?

Wieso erscheint mir Deine Aussage nicht stimmig zu sein?
TextField ist in JavaFX für einzelne Zeilen:


Zumindest ich kann derzeit / weiterhin nicht nachvollziehen, was Du genau machst und daher kann ich Dir leider nicht weiterhelfen.
Tut mir leid, ich hätte die Frage gleich zu Beginn vernünftig stellen sollen. Ich mach es noch mal konkret:
In eine TextArea (JavaFX) (ich habe versehentlich TextField geschrieben) wird ein Text eingegeben (siehe das Bild in Antwort #5).
In einer for-Schleife soll mit System.out.println() jede Zeile nach und nach einzeln ausgegeben werden. Wenn ich System.out.println(textArea.getText()) schreiben würde, bekäme ich alles, was auch in diese TextArea eingegeben wurde, ich möchte aber jede Zeile nach und nach ausgeben lassen.
Das Problem soll mit einer for-Schleife gelöst werden, die nur so oft läuft, wie es auch Zeilen gibt, jedoch weiß ich nicht, wie man ganze Wörter einzeln ausgeben lassen kann. Danke für deine Geduld!
 
Das passt aber so nicht, was Du schreibst.
  • Die Eingabe von mehreren Zeilen
  • gefolgt vom Auslesen mittels getText()
  • gefolgt vom split Aufruf
liefert ein Array. Dieses kannst Du so durchgehen, wie Du es gemacht hast.

Du wirst da aber nie die [ und ] in die Ausgabe bekommen.

Generell ist der Weg somit schon richtig. Was Probleme bereiten könnte ist der split Aufruf mit dem line.separator. Ich bin mir nicht sicher, wie die TextArea unter Windows die Zeilenumbrüche hat - es kann durchaus sein, dass diese immer \n sind und nie \r\n.

Daher wäre evtl. etwas wie .split("[\r\n]+") zielführender (So auch Leerzeilen entfernt werden sollen).

Aber genau das funktioniert - also in einem konkreten Code könnte das etwas sein wie:
Java:
        String text = area.getText();
        String[] lines = text.split("[\r\n]+");
        for (String line : lines)
            System.out.println(line);
 
Das passt aber so nicht, was Du schreibst.
  • Die Eingabe von mehreren Zeilen
  • gefolgt vom Auslesen mittels getText()
  • gefolgt vom split Aufruf
liefert ein Array. Dieses kannst Du so durchgehen, wie Du es gemacht hast.

Du wirst da aber nie die [ und ] in die Ausgabe bekommen.

Generell ist der Weg somit schon richtig. Was Probleme bereiten könnte ist der split Aufruf mit dem line.separator. Ich bin mir nicht sicher, wie die TextArea unter Windows die Zeilenumbrüche hat - es kann durchaus sein, dass diese immer \n sind und nie \r\n.

Daher wäre evtl. etwas wie .split("[\r\n]+") zielführender (So auch Leerzeilen entfernt werden sollen).

Aber genau das funktioniert - also in einem konkreten Code könnte das etwas sein wie:
Java:
        String text = area.getText();
        String[] lines = text.split("[\r\n]+");
        for (String line : lines)
            System.out.println(line);
Also das Ausgeben funktioniert ja jetzt soweit. Ich wollte das erweitern, indem diese Zeilen nacheinander kopiert und irgendwo eingefügt werden, aber der fügt stattdessen einen ganz komisch Mix ein:
Java:
ClipboardContent inputClipboardContent = new ClipboardContent();
String[] inputLines = textArea.getText().split("[\r\n]+");
// ...
for (String str : inputLines) {
            inputClipboardContent.putString(str);
            Platform.runLater(() -> {
                Clipboard.getSystemClipboard().setContent(inputClipboardContent);
            });

            robot.keyPress(VK_CONTROL);
            robot.keyPress(VK_V);
            robot.keyRelease(VK_CONTROL);
            robot.keyRelease(VK_V);
        }
 
Zuletzt bearbeitet von einem Moderator:
runLater macht das, was der Name sagt: es wird später etwas ausgeführt.

Du setzt den Inhalt des Clipboards also erst später aber einfügen tust du den Inhalt sofort. Das wäre jetzt meine Vermutung.
 
runLater macht das, was der Name sagt: es wird später etwas ausgeführt.

Du setzt den Inhalt des Clipboards also erst später aber einfügen tust du den Inhalt sofort. Das wäre jetzt meine Vermutung.
Ich habe mal 10 Testdurchläufe gemacht:
In TextArea habe ich Folgendes eingegeben:
Code:
abc
def
ghi

jkl
Mit System.out.println() bekomme ich Folgendes ausgegeben - so, wie es sein sollte:
Code:
abc
def
ghi
jkl
Und Folgendes wird von Robot eingefügt (10 Testdurchläufe):
Code:
jkljkljkljkl
jkljkljkljkl
jkljkljkljkl
abcjkljkljkl
jkljkljkljkl
abcjkljkljkl
defjkljkljkl
abcjkljkljkl
abcjkljkljkl
abcjkljkljkl
Folgendes habe ich gemacht, da ich sonst den Fehler Not on FX application thread; currentThread = Thread-93 ausgeworfen bekommen würde:
Java:
 Platform.runLater(() -> /**/);
Ich mache zum ersten Mal etwas aktiv mit Clipboard, deswegen übersehe ich vielleicht etwas ganz Offensichtliches. 🤔
 
runLater macht das, was der Name sagt: es wird später etwas ausgeführt.

Du setzt den Inhalt des Clipboards also erst später aber einfügen tust du den Inhalt sofort. Das wäre jetzt meine Vermutung.
Ich habe es hiermit lösen können, aber danke noch mal!:
Java:
Robot robot= new Robot();
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringSelection;

String[] inputLine = textArea.split("[\r\n]+");;

for (String str : inputLine) {
            stringSelection = new StringSelection(str);
            clipboard.setContents(stringSelection, null);

            robot.keyPress(VK_CONTROL);
            robot.keyPress(VK_V);
            robot.keyRelease(VK_CONTROL);
            robot.keyRelease(VK_V);

            robot.keyPress(VK_ENTER);
            robot.keyRelease(VK_ENTER);

            robot.delay(1000);
        }
Allerdings weiß ich nicht, ob Zeile 7 so sinnvoll ist, weil immer wieder ein neues Objekt erstellt wird oder nicht?
 

Zurück
Oben