Servlets Java

import java.awt.FontMetrics;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
 * Globally available utility classes, mostly for string manipulation.
 * 
 * @author Jim Menard, jimm@io.com
 */
public class StringUtils {
  /**
   * Returns a string with HTML special characters replaced by their entity
   * equivalents.
   * 
   * @param str
   *          the string to escape
   * @return a new string without HTML special characters
   */
  public static String escapeHTML(String str) {
    if (str == null || str.length() == 0)
      return "";
    StringBuffer buf = new StringBuffer();
    int len = str.length();
    for (int i = 0; i < len; ++i) {
      char c = str.charAt(i);
      switch (c) {
      case '&':
        buf.append("&");
        break;
      case '<':
        buf.append("<");
        break;
      case '>':
        buf.append(">");
        break;
      case '"':
        buf.append(""");
        break;
      case '\'':
        buf.append("'");
        break;
      default:
        buf.append(c);
        break;
      }
    }
    return buf.toString();
  }
  /**
   * Returns a new string where all newlines ("\n", "\r", or
   * "\r\n") have been replaced by "\n" plus XHTML break
   * tags ("\n<br />").
   * 


   * We don't call splitIntoLines because that method does not
   * tell us if the string ended with a newline or not.
   * 
   * @param str
   *          any string
   * @return a new string with all newlines replaced by "\n<br
   *         />"
   */
  public static String newlinesToXHTMLBreaks(String str) {
    if (str == null || str.length() == 0)
      return "";
    StringBuffer buf = new StringBuffer();
    int len = str.length();
    for (int i = 0; i < len; ++i) {
      char c = str.charAt(i);
      switch (c) {
      case '\n':
        buf.append("\n");
        break;
      case '\r':
        if (i + 1 < len && str.charAt(i + 1) == '\n') // Look for '\n'
          ++i;
        buf.append("\n");
        break;
      default:
        buf.append(c);
        break;
      }
    }
    return buf.toString();
  }
  /**
   * Returns a string with XML special characters replaced by their entity
   * equivalents.
   * 
   * @param str
   *          the string to escape
   * @return a new string without XML special characters
   */
  public static String escapeXML(String str) {
    return escapeHTML(str);
  }
  /**
   * Returns a string with XML entities replaced by their normal characters.
   * 
   * @param str
   *          the string to un-escape
   * @return a new normal string
   */
  public static String unescapeXML(String str) {
    if (str == null || str.length() == 0)
      return "";
    StringBuffer buf = new StringBuffer();
    int len = str.length();
    for (int i = 0; i < len; ++i) {
      char c = str.charAt(i);
      if (c == '&') {
        int pos = str.indexOf(";", i);
        if (pos == -1) { // Really evil
          buf.append('&');
        } else if (str.charAt(i + 1) == '#') {
          int val = Integer.parseInt(str.substring(i + 2, pos), 16);
          buf.append((char) val);
          i = pos;
        } else {
          String substr = str.substring(i, pos + 1);
          if (substr.equals("&"))
            buf.append('&');
          else if (substr.equals("<"))
            buf.append('<');
          else if (substr.equals(">"))
            buf.append('>');
          else if (substr.equals("""))
            buf.append('"');
          else if (substr.equals("'"))
            buf.append('\'');
          else
            // ????
            buf.append(substr);
          i = pos;
        }
      } else {
        buf.append(c);
      }
    }
    return buf.toString();
  }
  /**
   * Returns str with leading and trailing spaces trimmed or, if
   * str is null, returns null.
   * 
   * @return str trimmed or null
   */
  public static String nullOrTrimmed(String str) {
    return str == null ? str : str.trim();
  }
}