001 /* ==================================================================== 002 * The Apache Software License, Version 1.1 003 * 004 * Copyright (c) 2003 The Apache Software Foundation. All rights 005 * reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without 008 * modification, are permitted provided that the following conditions 009 * are met: 010 * 011 * 1. Redistributions of source code must retain the above copyright 012 * notice, this list of conditions and the following disclaimer. 013 * 014 * 2. Redistributions in binary form must reproduce the above copyright 015 * notice, this list of conditions and the following disclaimer in 016 * the documentation and/or other materials provided with the 017 * distribution. 018 * 019 * 3. The end-user documentation included with the redistribution, 020 * if any, must include the following acknowledgment: 021 * "This product includes software developed by the 022 * Apache Software Foundation (http://www.apache.org/)." 023 * Alternately, this acknowledgment may appear in the software itself, 024 * if and wherever such third-party acknowledgments normally appear. 025 * 026 * 4. The names "The Jakarta Project", "Commons", and "Apache Software 027 * Foundation" must not be used to endorse or promote products derived 028 * from this software without prior written permission. For written 029 * permission, please contact apache@apache.org. 030 * 031 * 5. Products derived from this software may not be called "Apache", 032 * nor may "Apache" appear in their name, without prior written 033 * permission of the Apache Software Foundation. 034 * 035 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 036 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 037 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 038 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 039 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 040 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 041 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 042 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 043 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 044 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 045 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 046 * SUCH DAMAGE. 047 * ==================================================================== 048 * 049 * This software consists of voluntary contributions made by many 050 * individuals on behalf of the Apache Software Foundation. For more 051 * information on the Apache Software Foundation, please see 052 * <http://www.apache.org/>. 053 * 054 */ 055 package org.jpu.patterns.common; 056 057 import java.util.ArrayList; 058 import java.util.Iterator; 059 import java.util.List; 060 061 import org.apache.commons.lang.StringUtils; 062 import org.apache.commons.logging.Log; 063 import org.apache.commons.logging.LogFactory; 064 065 public class JPUStringUtils { 066 private JPUStringUtils() {} 067 068 /** 069 * Equivalent to <code>split(str, delim, true)</code>. 070 */ 071 public static List split(String str, String delim) { 072 return split(str, delim, true); 073 } 074 075 /** 076 * Just like {@link #split(String,String,boolean)}, except that only the leftmost 077 * "<code>n-1</code>" delimeted parts are split; the rest are left contiguous. 078 * 079 * @param str The string. 080 * @param delim The delimeter. 081 * @param n The maximum number of parts that will appear in the resulting <code>List</code>. If less than 2, 082 * the resulting list will contain exactly one element set to the entire original string "<code>str</code>". 083 * @param trim Indicates whether to trim each part before adding it to the resulting <code>List</code>. 084 */ 085 public static List splitN(String str, String delim, int n, boolean trim) { 086 List parts = split(str, delim, trim); 087 List result = new ArrayList(); 088 Iterator it = parts.iterator(); 089 for( int i = 0; it.hasNext() && i < n-1; i++ ) { 090 result.add( it.next() ); 091 } 092 if ( it.hasNext() ) { 093 String joined = StringUtils.join(it, delim); 094 result.add(joined); 095 } 096 return result; 097 } 098 099 /** 100 * This method is like <code>org.apache.commons.lang.StringUtils.split()</code>, except for two differences: 101 * 1) Its return value is <code>List</code> instead of <code>String[]</code>, and 2) it gives you the option of 102 * trimming each component before it is added to the list. 103 */ 104 public static List split(String str, String delim, boolean trim) { 105 List result = new ArrayList(); 106 String[] array = StringUtils.split(str, delim); 107 for( int i = 0; i < array.length; i++ ) { 108 String tmp = array[i]; 109 if ( trim ) { 110 tmp = tmp.trim(); 111 } 112 result.add( tmp ); 113 } 114 return result; 115 } 116 117 private static Log _log = LogFactory.getLog(JPUStringUtils.class); 118 } 119