hard wrap selber programmieren

Beispiel0

Mitglied
Ich finde kein Tool das das vernünftig kann... Vielleicht bin ich auch zu dämlich 🙈

Jedenfalls ist hier mein Versuch:

Java:
import java.util.Scanner;

public class TextWrap {
    public static void main(String[] args) {
        System.out.println("Enter Text:");
        String s1 = new Scanner(System.in).nextLine();
        while (true) {
            System.out.println("Length:");
            int o = new Scanner(System.in).nextInt();
            if (o <= 0) {
                break;
            }
            String[] split = s1.split(" ");
            int i = 0;
            for (String s : split) {
                i += s.length();
                if (i < o) {
                    System.out.print(s + " ");
                } else {
                    System.out.println(s);
                    i = 0;
                }
            }
        }
    }
}

Code:
Enter Text:
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
Length:
10
Lorem ipsum
dolor sit amet,
consetetur
sadipscing
elitr, sed diam
nonumy eirmod
tempor invidunt
ut labore et
dolore magna
aliquyam erat,
sed diam voluptua.
At

Wie man sieht, sieht der Text aber immer noch scheiße nicht gut aus.

Was muss ich ändern? Die Zeilen sind zu lang.
 
Naja, das Problem ist dieser else-Zweig:
Java:
} else {
  System.out.println(s);
  i = 0;
Wenn du merkst, dass der String `s` die Länge sprengen würde, gibst du aber dennoch noch 's' aus.
Das könntest du ändern zu:
Java:
String[] split = s1.split(" ");
int i = 0;
for (String s : split) {
    int len = s.length();
    if (i + len > o) {
      System.out.println();
      i = 0;
    }
    System.out.print(s + " ");
    i += len;
}
 
Kommt halt drauf an, was du willst. Wenn du willst, dass alle Zeilen _exakt_ gleich lang sind, also Blocksatz... das geht natürlich nicht. Bzw. nur, wenn du die Sachen nicht auf einer Konsole ausgibst, sondern wirklich einen Typesetter/Font-renderer implementierst mit kleinen Abständen zwischen den Zeichen, so dass alle Zeilen gleich lang aussehen, auch wenn sie unterschiedlich viele Zeichen beinhalten.
 
oder mono fonts hernimmst ( die sowieso besser als alle anderen sind 😛 )
Das meinte @httpdigest glaube ich nicht, und ich auch nicht...

Man kann ja genau nach zB 10 Zeichen trennen, dann sind allerdings die Wörter kaputt.

Oder man trennt wörterweise. Dann muss man die "Zwischenräume" aber iwie auffüllen. Unabhängig vom Monospace Font.

Oder man trennt Silbenweise... Problem: Hab nicht Linguistik studiert...

Oder gäbe es da noch eine andere Möglichkeit, ohne Renderer?
 

Zurück
Oben