2016-09-16 1 views
0

Ich versuche, Text basierend auf einer Breite von 10 Zeichen zu umbrechen. Nachdem bei anderen Fragen suchen, ich habe folgendes:Java Text Wrap Problem, verursacht durch Eingabe Breite

StringBuilder sb = new StringBuilder(s); 

int i = 0; 
while (i + 10 < sb.length() && (i = sb.lastIndexOf(" ", i + 10)) != -1) { 
    sb.replace(i, i + 1, "\n"); 
} 

System.out.println(sb.toString()); 

Das funktioniert, bis ein Wort in meinem String länger als die angegebene Breite. Wenn das auftritt, wird der Rest der Zeichenfolge in Zeile gedruckt, anstatt immer noch der Linienbreitenregel zu folgen. Irgendwelche Ideen? Ich habe ein "anderes" mit einer anderen Bedingung versucht, aber ich konnte es nicht zur Arbeit bringen. Entschuldigung, wenn das eher trivial erscheint.

+0

Also wollen Sie eine neue Zeile alle 10 Zeichen, es sei denn, es ist ein Leerzeichen? – StackTraceYo

+0

Ja, das ist die Absicht – NewToThis

Antwort

0

Wenn Sie ein Wort haben, die länger als 9 Zeichen ist, sb.lastIndexOf("", i + 10) gibt Ihnen -1. Das liegt daran, dass der Index des nächsten Speicherplatzes größer als i + 10 ist und sb.lastIndexOf("", i + 10) mit dem Index i + 10 beginnt und nach einem Leerzeichen bis zum Anfang des Strings sucht und keine Leerzeichen finden kann (sie wurden alle durch neue Zeilen ersetzt). Sie können Ihren Code wie unten beschrieben reparieren.

StringBuilder sb = new StringBuilder(s); 

    int i = 0; 
    while (i + 10 < sb.length() && 
      (i = Math.max(sb.indexOf(" ", i), sb.lastIndexOf(" ", i + 10))) != -1) { 
     sb.replace(i, i + 1, "\n"); 
    } 

    System.out.println(sb.toString()); 
+0

Das funktioniert, außer jetzt ist das allerletzte Wort in seiner eigenen Zeile. – NewToThis

+0

Ich denke, Sie sollten i + 10 uoyilmaz

0

Sie könnten Ihren String in ein Array von Zeichen umwandeln und sie besuchen und fragen, ob die Variable iterator % 10 (in diesem Fall in 9, weil i = 0), wenn dies dem Fall geben Sie einen Zeilenumbruch und den Charakter, das alles wird zu einer StringBuilder hinzugefügt ... könnte eine Lösung

char[] a="ABCDFGHIKLMNOPQRSTUVWXYZ".toCharArray(); //String convert to charArray 
    StringBuilder sb = new StringBuilder(a.length); 
    for (int i = 0; i < a.length; i++) { 
     if(i%9==0) sb.append("\n" + a[i]); // 
     sb.append(a[i]); 
    } 
    System.out.println(sb.toString());