Texte umbrechen (Word-Wrap)
Dafür gibt es unterschiedliche Varianten. Die beste ist noch, einen BreakIterator zu nutzen. NetBeans (OpenIDE) bringt hier Funktionen mit. Extrahiert und ohne Abhängigkeiten lässt sich das auf folgendes reduzieren:
import java.text.BreakIterator;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.StringTokenizer;
public class StringUtils{ /** * Indent and wrap multi-line strings. * * @param original the original string to wrap * @param width the maximum width of lines * @param breakIterator algorithm for breaking lines * @param removeNewLines if true, any newlines in the original string are ignored * @return the whole string with embedded newlines */ public static String wrapAndIndentString( String original, String indent, int width ) { BreakIterator breakIterator = BreakIterator.getWordInstance();
List lines = wrapStringToArray( original, width, breakIterator, true ); StringBuffer retBuf = new StringBuffer();
for ( String line : lines ) { retBuf.append( indent ); retBuf.append( line ); retBuf.append( '\n' ); }
return retBuf.toString(); }
/** * Wrap multi-line strings (and get the individual lines). * * @param original the original string to wrap * @param width the maximum width of lines * @param breakIterator breaks original to chars, words, sentences, depending on what instance you provide. * @param removeNewLines if true, any newlines in the original string are ignored * @return the lines after wrapping */ public static List wrapStringToArray( String original, int width, BreakIterator breakIterator, boolean removeNewLines ) { if ( original.length() == 0 ) return Arrays.asList( original );
String[] workingSet;
// substitute original newlines with spaces, // remove newlines from head and tail if ( removeNewLines ) { original = original.trim(); original = original.replace( '\n', ' ' ); workingSet = new String[] { original }; } else { StringTokenizer tokens = new StringTokenizer( original, "\n" ); // NOI18N int len = tokens.countTokens(); workingSet = new String[len];
for ( int i = 0; i < len; i++ ) workingSet[ i ] = tokens.nextToken(); }
if ( width < 1 ) width = 1;
if ( original.length()