Mega Code Archive

 
Categories / Java / Data Type
 

Truncate text on a whitespace boundary (near a specified length)

/**********************************************************************************  *  * Copyright (c) 2003, 2004 The Regents of the University of Michigan, Trustees of Indiana University,  *                  Board of Trustees of the Leland Stanford, Jr., University, and The MIT Corporation  *  * Licensed under the Educational Community License Version 1.0 (the "License");  * By obtaining, using and/or copying this Original Work, you agree that you have read,  * understand, and will comply with the terms and conditions of the Educational Community License.  * You may obtain a copy of the License at:  *  *      http://cvs.sakaiproject.org/licenses/license_1_0.html  *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE  * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  *  **********************************************************************************/ public class Utils {   private static final int MINIMUM_SUPPORTED_LENGTH = 4;      /**    * Truncate text on a whitespace boundary (near a specified length). The    * length of the resultant string will be in the range:<br>    * <code>   (requested-length * .25) ~ (requested-length * 1.5) </code>    *     * @param text    *          Text to truncate    * @param length    *          Target length    * @return Truncated text    */   public static String truncateAtWhitespace(String text, int length) {     int desired, lowerBound, upperBound;     /*      * Make sure we have a reasonable length to work with      */     if (length < MINIMUM_SUPPORTED_LENGTH) {       throw new IllegalArgumentException("Requested length too short (must be "           + MINIMUM_SUPPORTED_LENGTH + " or greated)");     }     /*      * No need to truncate - the original string "fits"      */     if (text.length() <= length) {       return text;     }     /*      * Try to find whitespace befor the requested maximum      */     lowerBound = length / 4;     upperBound = length + (length / 2);     for (int i = length - 1; i > lowerBound; i--) {       if (Character.isWhitespace(text.charAt(i))) {         return text.substring(0, i);       }     }     /*      * No whitespace - look beyond the desired maximum      */     for (int i = (length); i < upperBound; i++) {       if (Character.isWhitespace(text.charAt(i))) {         return text.substring(0, i);       }     }     /*      * No whitespace, just truncate the text at the requested length      */     return text.substring(0, length);   } }