Mega Code Archive

 
Categories / Java / Data Type
 

Splits the provided text into an array, separator specified

/*  * Licensed to the Apache Software Foundation (ASF) under one or more  * contributor license agreements.  See the NOTICE file distributed with  * this work for additional information regarding copyright ownership.  * The ASF licenses this file to You under the Apache License, Version 2.0  * (the "License"); you may not use this file except in compliance with  * the License.  You may obtain a copy of the License at  *   *      http://www.apache.org/licenses/LICENSE-2.0  *   * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ import java.util.ArrayList; import java.util.List; public class Main {   /**    * <p>Splits the provided text into an array, separator specified.    * This is an alternative to using StringTokenizer.</p>    *    * <p>The separator is not included in the returned String array.    * Adjacent separators are treated as one separator.    * For more control over the split use the StrTokenizer class.</p>    *    * <p>A <code>null</code> input String returns <code>null</code>.</p>    *    * <pre>    * StringUtils.split(null, *)         = null    * StringUtils.split("", *)           = []    * StringUtils.split("a.b.c", '.')    = ["a", "b", "c"]    * StringUtils.split("a..b.c", '.')   = ["a", "b", "c"]    * StringUtils.split("a:b:c", '.')    = ["a:b:c"]    * StringUtils.split("a b c", ' ')    = ["a", "b", "c"]    * </pre>    *    * @param str  the String to parse, may be null    * @param separatorChar  the character used as the delimiter    * @return an array of parsed Strings, <code>null</code> if null String input    * @since 2.0    */   public static String[] split(String str, char separatorChar) {       return splitWorker(str, separatorChar, false);   } /**  * Performs the logic for the <code>split</code> and   * <code>splitPreserveAllTokens</code> methods that do not return a  * maximum array length.  *  * @param str  the String to parse, may be <code>null</code>  * @param separatorChar the separate character  * @param preserveAllTokens if <code>true</code>, adjacent separators are  * treated as empty token separators; if <code>false</code>, adjacent  * separators are treated as one separator.  * @return an array of parsed Strings, <code>null</code> if null String input  */ private static String[] splitWorker(String str, char separatorChar, boolean preserveAllTokens) {     // Performance tuned for 2.0 (JDK1.4)     if (str == null) {         return null;     }     int len = str.length();     if (len == 0) {         return new String[0];     }     List list = new ArrayList();     int i = 0, start = 0;     boolean match = false;     boolean lastMatch = false;     while (i < len) {         if (str.charAt(i) == separatorChar) {             if (match || preserveAllTokens) {                 list.add(str.substring(start, i));                 match = false;                 lastMatch = true;             }             start = ++i;             continue;         }         lastMatch = false;         match = true;         i++;     }     if (match || (preserveAllTokens && lastMatch)) {         list.add(str.substring(start, i));     }     return (String[]) list.toArray(new String[list.size()]); } }