Illustration einer tropischen Insel mit Palmen und einem hohen Berg

Java Blog für Programmierer

Texte umbrechen (Word-Wrap)

· Christian Ullenboom

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()

Kategorien: Open Source

← Alle Beiträge