| /* |
| * Copyright 2001-2004 The Apache Software Foundation. |
| * |
| * Licensed 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. |
| */ |
| |
| package org.apache.ws.security.util; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| public class StringUtil { |
| /** |
| * An empty immutable <code>String</code> array. |
| */ |
| public static final String[] EMPTY_STRING_ARRAY = new String[0]; |
| |
| /** |
| * Tests if this string starts with the specified prefix (Ignoring whitespaces) |
| * |
| * @param prefix |
| * @param string |
| * @return boolean |
| */ |
| public static boolean startsWithIgnoreWhitespaces(String prefix, String string) { |
| int index1 = 0; |
| int index2 = 0; |
| int length1 = prefix.length(); |
| int length2 = string.length(); |
| char ch1 = ' '; |
| char ch2 = ' '; |
| while (index1 < length1 && index2 < length2) { |
| while (index1 < length1 && Character.isWhitespace(ch1 = prefix.charAt(index1))) { |
| index1++; |
| } |
| while (index2 < length2 && Character.isWhitespace(ch2 = string.charAt(index2))) { |
| index2++; |
| } |
| if (index1 == length1 && index2 == length2) { |
| return true; |
| } |
| if (ch1 != ch2) { |
| return false; |
| } |
| index1++; |
| index2++; |
| } |
| if (index1 < length1 && index2 >= length2) |
| return false; |
| return true; |
| } |
| |
| /** |
| * <p>Splits the provided text into an array, separator specified. |
| * This is an alternative to using StringTokenizer.</p> |
| * <p/> |
| * <p>The separator is not included in the returned String array. |
| * Adjacent separators are treated as one separator.</p> |
| * <p/> |
| * <p>A <code>null</code> input String returns <code>null</code>.</p> |
| * <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\tb\nc", null) = ["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, |
| * <code>null</code> splits on whitespace |
| * @return an array of parsed Strings, <code>null</code> if null String input |
| */ |
| public static String[] split(String str, char separatorChar) { |
| if (str == null) { |
| return null; |
| } |
| int len = str.length(); |
| if (len == 0) { |
| return EMPTY_STRING_ARRAY; |
| } |
| List list = new ArrayList(); |
| int i = 0, start = 0; |
| boolean match = false; |
| while (i < len) { |
| if (str.charAt(i) == separatorChar) { |
| if (match) { |
| list.add(str.substring(start, i)); |
| match = false; |
| } |
| start = ++i; |
| continue; |
| } |
| match = true; |
| i++; |
| } |
| if (match) { |
| list.add(str.substring(start, i)); |
| } |
| return (String[]) list.toArray(new String[list.size()]); |
| } |
| } |