View Javadoc

    1   /* Copyright 2004, 2005 Acegi Technology Pty Limited
    2    *
    3    * Licensed under the Apache License, Version 2.0 (the "License");
    4    * you may not use this file except in compliance with the License.
    5    * You may obtain a copy of the License at
    6    *
    7    *     http://www.apache.org/licenses/LICENSE-2.0
    8    *
    9    * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15
    16  package org.acegisecurity.util;
    17
    18  import org.springframework.util.Assert;
    19  import org.springframework.util.StringUtils;
    20
    21  import java.util.HashMap;
    22  import java.util.Map;
    23
    24
    25  /***
    26   * Provides several <code>String</code> manipulation methods.
    27   *
    28   * @author Ben Alex
    29   * @version $Id: StringSplitUtils.java,v 1.3 2005/11/17 00:56:09 benalex Exp $
    30   */
    31  public class StringSplitUtils {
    32      //~ Methods ================================================================
    33
    34      /***
    35       * Splits a <code>String</code> at the first instance of the delimiter.
    36       *
    37       * <p>
    38       * Does not include the delimiter in the response.
    39       * </p>
    40       *
    41       * @param toSplit the string to split
    42       * @param delimiter to split the string up with
    43       *
    44       * @return a two element array with index 0 being before the delimiter, and
    45       *         index 1 being after the delimiter (neither element includes the
    46       *         delimiter)
    47       *
    48       * @throws IllegalArgumentException if an argument was invalid
    49       */
    50      public static String[] split(String toSplit, String delimiter) {
    51          Assert.hasLength(toSplit, "Cannot split a null or empty string");
    52          Assert.hasLength(delimiter,
    53              "Cannot use a null or empty delimiter to split a string");
    54
    55          if (delimiter.length() != 1) {
    56              throw new IllegalArgumentException(
    57                  "Delimiter can only be one character in length");
    58          }
    59
    60          int offset = toSplit.indexOf(delimiter);
    61
    62          if (offset < 0) {
    63              return null;
    64          }
    65
    66          String beforeDelimiter = toSplit.substring(0, offset);
    67          String afterDelimiter = toSplit.substring(offset + 1);
    68
    69          return new String[] {beforeDelimiter, afterDelimiter};
    70      }
    71
    72      /***
    73       * Takes an array of <code>String</code>s, and for each element removes any
    74       * instances of <code>removeCharacter</code>, and splits the element based
    75       * on the <code>delimiter</code>. A <code>Map</code> is then generated,
    76       * with the left of the delimiter providing the key, and the right of the
    77       * delimiter providing the value.
    78       *
    79       * <p>
    80       * Will trim both the key and value before adding to the <code>Map</code>.
    81       * </p>
    82       *
    83       * @param array the array to process
    84       * @param delimiter to split each element using (typically the equals
    85       *        symbol)
    86       * @param removeCharacters one or more characters to remove from each
    87       *        element prior to attempting the split operation (typically the
    88       *        quotation mark symbol) or <code>null</code> if no removal should
    89       *        occur
    90       *
    91       * @return a <code>Map</code> representing the array contents, or
    92       *         <code>null</code> if the array to process was null or empty
    93       */
    94      public static Map splitEachArrayElementAndCreateMap(String[] array,
    95          String delimiter, String removeCharacters) {
    96          if ((array == null) || (array.length == 0)) {
    97              return null;
    98          }
    99
    100         Map map = new HashMap();
    101
    102         for (int i = 0; i < array.length; i++) {
    103             String postRemove;
    104
    105             if (removeCharacters == null) {
    106                 postRemove = array[i];
    107             } else {
    108                 postRemove = StringUtils.replace(array[i], removeCharacters, "");
    109             }
    110
    111             String[] splitThisArrayElement = split(postRemove, delimiter);
    112
    113             if (splitThisArrayElement == null) {
    114                 continue;
    115             }
    116
    117             map.put(splitThisArrayElement[0].trim(),
    118                 splitThisArrayElement[1].trim());
    119         }
    120
    121         return map;
    122     }
    123 }