Padding and triming strings : String Pad « Data Type « Java






Padding and triming strings

       
/**
 * The utillib library.
 * More information is available at http://www.jinchess.com/.
 * Copyright (C) 2002-2003 Alexander Maryanovsky.
 * All rights reserved.
 *
 * The utillib library is free software; you can redistribute
 * it and/or modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * The utillib library is distributed in the hope that it will
 * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
 * General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with utillib library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */


import java.util.StringTokenizer;


/**
 * A utility class which provides many useful text manipulation methods.
 */

public class TextUtilities{
  


  /**
   * Pads the beginning of the given String with the given character until it's
   * <code>length</code> characters long. If the given String's size is already
   * <code>length</code> or larger, the given string is returned as is.
   */

  public static String padStart(String s, char c, int length){
    if (s.length()>=length)
      return s;

    StringBuffer buf = new StringBuffer(s);
    for (int i=s.length();i<length;i++)
      buf.insert(0,c);

    return buf.toString();
  }



  /**
   * Pads the end of the given String with the given character until it's
   * <code>length</code> characters long. If the given String's size is already
   * <code>length</code> or larger, the given string is returned as is.
   */

  public static String padEnd(String s, char c, int length){
    if (s.length()>=length)
      return s;

    StringBuffer buf = new StringBuffer(s);
    for (int i=s.length();i<length;i++)
      buf.append(c);

    return buf.toString();
  }



  /**
   * Pads the given String on both sides equally (if possible) with the given 
   * character until it's <code>length</code> characters long. If the given 
   * String's size is already <code>length</code> or larger, the given 
   * string is returned as is.
   */

  public static String padSides(String s, char c, int length){
    if (s.length()>=length)
      return s;

    StringBuffer buf = new StringBuffer(s);
    for (int i=s.length();i<length-1;i+=2){
      buf.insert(0,c);
      buf.append(c);
    }

    if (buf.length()<length)
      buf.insert(0,c);

    return buf.toString();
  }
  
  
  
  /**
   * Trims the specified string on the right only.
   */
   
   public static String trimRight(String s){
     StringBuffer buf = new StringBuffer(s);
     int length = buf.length();
     while (Character.isWhitespace(buf.charAt(length - 1)))
       buf.setLength(--length);
     
     return buf.toString();
   }



  /**
   * Trims the specified string on the left only.
   */
   
   public static String trimLeft(String s){
     int i = 0;
     while (Character.isWhitespace(s.charAt(i)))
       i++;
     
     return s.substring(i);
   }



  /**
   * <P>Returns a substring of the given StringBuffer's string which consists of
   * the characters from the beginning of it until the first occurrence of the
   * given delimiter string or if the delimiter doesn't occur, until the end
   * of the string. The StringBuffer is modified so it no longer contains those
   * characters or the delimiter.
   * <P>Examples:
   * <UL>
   *   <LI>nextToken(new StringBuffer("abcdefgh"), "de") returns "abc" and
   *       the StringBuffer is modified to represent the string "fgh".
   *   <LI>nextToken(new StringBuffer("abcdefgh"), "a") returns an empty string
   *       and the StringBuffer is modified to represent the string "bcdefgh".
   *   <LI>nextToken(new StringBuffer("abcdefgh"), "k") returns "abcdefgh" and
   *       the StringBuffer is modified to represent an empty string.
   * </UL>
   */

  public static String nextToken(StringBuffer buf, String delimiter){
    String bufStr = buf.toString();
    int delimIndex = bufStr.indexOf(delimiter);

    if (delimIndex==-1){
      buf.setLength(0);
      return bufStr;
    }
      
    String str = bufStr.substring(0,delimIndex);
    buf.reverse();
    buf.setLength(buf.length()-delimIndex-delimiter.length());
    buf.reverse();

    return str;
  }





  /**
   * Returns an array of the tokens produced by the specified string with the
   * specified delimiter characters.
   */

  public static String [] getTokens(String text, String delimiters){
    StringTokenizer tokenizer = new StringTokenizer(text, delimiters);
    String [] tokens = new String[tokenizer.countTokens()];
    for (int i = 0; i < tokens.length; i++)
      tokens[i] = tokenizer.nextToken();

    return tokens;
  }



  /**
   * Parses the specified list of integers delimited by the specified
   * delimiters.
   */

  public static int [] parseIntList(String text, String delimiters){
    StringTokenizer tokenizer = new StringTokenizer(text, delimiters);
    int [] tokens = new int[tokenizer.countTokens()];
    for (int i = 0; i < tokens.length; i++)
      tokens[i] = Integer.parseInt(tokenizer.nextToken());

    return tokens;
  }
  
  
  
  /**
   * Translates the specified resource name into the context of the specified
   * class. Basically, this method returns the name of the resource you need to
   * use when loading via a classloader, if via the specified class you would
   * load it simply with <code>Class.getResource(resourceName)</code>.
   */
   
  public static String translateResource(Class c, String resourceName){
    String path = c.getName();
    int dotIndex = path.lastIndexOf('.');
    if (dotIndex != -1){
      path = path.substring(0, dotIndex);
      path = path.replace('.', '/') + '/' + resourceName;
    }
    else
      return resourceName;
    
    return path;
  }
  
  
  
  /**
   * Breaks the specified text into lines no longer than the specified length,
   * without breaking words. The breaking is done by inserting newlines at
   * appropriate locations. Note that if there are words longer than
   * <code>maxLength</code>, they will not be broken.
   */
  
  public static String breakIntoLines(String text, int maxLength){
    StringBuffer buf = new StringBuffer(text);
    text = text + " "; // Fake an extra space at the end to simplify the algorithm 
    
    int lastNewline = -1; // The index of the last newline
    int lastSpace = -1; // The index of the last space
    int curSpace; // The index of the current space
    
    while ((curSpace = text.indexOf(' ', lastSpace + 1)) != -1){
      if ((curSpace - lastNewline - 1 > maxLength) && (lastSpace > lastNewline)){
        // lastSpace == lastNewline means the current word is longer than maxLength
        buf.setCharAt(lastSpace, '\n');
        lastNewline = lastSpace;
      }
    
      lastSpace = curSpace;
    }
  
    return buf.toString();
  }



}

   
    
    
    
    
    
    
  








Related examples in the same category

1.Left pad a String with a specified String.
2.Left pad a String with a specified character.
3.Left pad a String with spaces (' ').
4.Right pad a String with a specified String.
5.Right pad a String with a specified character.
6.Right pad a String with spaces (' ').
7.Pad string
8.Padded String
9.Set string length, padding with character if the shorter, or truncating if longer
10.Returns the quoted version of the string using the quotechar argument.
11.Return a string padded with the given string for the given count.
12.Left pad the given text parameter
13.Right pad the given text parameter
14.Left padding
15.Right padding
16.Pads the string with 0x and zeros on the left until it has the requested size.
17.Pads the string with zeros on the left until it has the requested size.
18.Right, left justify the string