Java tutorial
/********************************************************************************** * * 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); } }