chops a String at a word boundary (whitespace) that occurs at the specified index in the argument or before. - Android java.lang

Android examples for java.lang:String Shorten

Description

chops a String at a word boundary (whitespace) that occurs at the specified index in the argument or before.

Demo Code


/**//w  w  w  .j  a v a2  s  . co  m
 * $RCSfile: StringUtils.java,v $ $Revision: 1.11.2.2 $ $Date: 2001/01/16
 * 06:06:07 $ Copyright (C) 2000 CoolServlets.com. All rights reserved.
 * =================================================================== The
 * Apache Software License, Version 1.1 Redistribution and use in source and
 * binary forms, with or without modification, are permitted provided that the
 * following conditions are met: 1. Redistributions of source code must retain
 * the above copyright notice, this list of conditions and the following
 * disclaimer. 2. Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution. 3. The
 * end-user documentation included with the redistribution, if any, must include
 * the following acknowledgment: "This product includes software developed by
 * CoolServlets.com (http://www.coolservlets.com)." Alternately, this
 * acknowledgment may appear in the software itself, if and wherever such
 * third-party acknowledgments normally appear. 4. The names "Jive" and
 * "CoolServlets.com" must not be used to endorse or promote products derived
 * from this software without prior written permission. For written permission,
 * please contact webmaster@coolservlets.com. 5. Products derived from this
 * software may not be called "Jive", nor may "Jive" appear in their name,
 * without prior written permission of CoolServlets.com. THIS SOFTWARE IS
 * PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR ITS
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ==================================================================== This
 * software consists of voluntary contributions made by many individuals on
 * behalf of CoolServlets.com. For more information on CoolServlets.com, please
 * see <http://www.coolservlets.com>.
 */

public class Main {

  /**
   * Intelligently chops a String at a word boundary (whitespace) that occurs at
   * the specified index in the argument or before. However, if there is a newline
   * character before <code>length</code>, the String will be chopped there. If no
   * newline or whitespace is found in <code>string</code> up to the index
   * <code>length</code>, the String will chopped at <code>length</code>.
   * <p>
   * For example, chopAtWord("This is a nice String", 10) will return "This is a"
   * which is the first word boundary less than or equal to 10 characters into the
   * original String.
   * 
   * @param string
   *          the String to chop.
   * @param length
   *          the index in <code>string</code> to start looking for a whitespace
   *          boundary at.
   * @return a substring of <code>string</code> whose length is less than or equal
   *         to <code>length</code>, and that is chopped at whitespace.
   */
  public static final String chopAtWord(String string, int length) {
    if (string == null) {
      return string;
    }

    char[] charArray = string.toCharArray();
    int sLength = string.length();
    if (length < sLength) {
      sLength = length;
    }

    // First check if there is a newline character before length; if so,
    // chop word there.
    for (int i = 0; i < sLength - 1; i++) {
      // Windows
      if (charArray[i] == '\r' && charArray[i + 1] == '\n') {
        return string.substring(0, i);
      }
      // Unix
      else if (charArray[i] == '\n') {
        return string.substring(0, i);
      }
    }
    // Also check boundary case of Unix newline
    if (charArray[sLength - 1] == '\n') {
      return string.substring(0, sLength - 1);
    }

    // Done checking for newline, now see if the total string is less than
    // the specified chop point.
    if (string.length() < length) {
      return string;
    }

    // No newline, so chop at the first whitespace.
    for (int i = length - 1; i > 0; i--) {
      if (charArray[i] == ' ') {
        return string.substring(0, i).trim();
      }
    }

    // Did not find word boundary so return original String chopped at
    // specified length.
    return string.substring(0, length);
  }

}

Related Tutorials