<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.util;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import java.text.ParseException;</a>
<span class="sourceLineNo">022</span><a id="line.22">import java.util.*;</a>
<span class="sourceLineNo">023</span><a id="line.23"></a>
<span class="sourceLineNo">024</span><a id="line.24">/**</a>
<span class="sourceLineNo">025</span><a id="line.25"> * &lt;p&gt;Simple utility class for String operations useful across the framework.</a>
<span class="sourceLineNo">026</span><a id="line.26"> * &lt;p/&gt;</a>
<span class="sourceLineNo">027</span><a id="line.27"> * &lt;p&gt;Some methods in this class were copied from the Spring Framework so we didn't have to re-invent the wheel,</a>
<span class="sourceLineNo">028</span><a id="line.28"> * and in these cases, we have retained all license, copyright and author information.</a>
<span class="sourceLineNo">029</span><a id="line.29"> *</a>
<span class="sourceLineNo">030</span><a id="line.30"> * @since 0.9</a>
<span class="sourceLineNo">031</span><a id="line.31"> */</a>
<span class="sourceLineNo">032</span><a id="line.32">public class StringUtils {</a>
<span class="sourceLineNo">033</span><a id="line.33"></a>
<span class="sourceLineNo">034</span><a id="line.34">    //TODO - complete JavaDoc</a>
<span class="sourceLineNo">035</span><a id="line.35"></a>
<span class="sourceLineNo">036</span><a id="line.36">    /**</a>
<span class="sourceLineNo">037</span><a id="line.37">     * Constant representing the empty string, equal to &amp;quot;&amp;quot;</a>
<span class="sourceLineNo">038</span><a id="line.38">     */</a>
<span class="sourceLineNo">039</span><a id="line.39">    public static final String EMPTY_STRING = "";</a>
<span class="sourceLineNo">040</span><a id="line.40"></a>
<span class="sourceLineNo">041</span><a id="line.41">    /**</a>
<span class="sourceLineNo">042</span><a id="line.42">     * Constant representing the default delimiter character (comma), equal to &lt;code&gt;','&lt;/code&gt;</a>
<span class="sourceLineNo">043</span><a id="line.43">     */</a>
<span class="sourceLineNo">044</span><a id="line.44">    public static final char DEFAULT_DELIMITER_CHAR = ',';</a>
<span class="sourceLineNo">045</span><a id="line.45"></a>
<span class="sourceLineNo">046</span><a id="line.46">    /**</a>
<span class="sourceLineNo">047</span><a id="line.47">     * Constant representing the default quote character (double quote), equal to '&amp;quot;'&lt;/code&gt;</a>
<span class="sourceLineNo">048</span><a id="line.48">     */</a>
<span class="sourceLineNo">049</span><a id="line.49">    public static final char DEFAULT_QUOTE_CHAR = '"';</a>
<span class="sourceLineNo">050</span><a id="line.50"></a>
<span class="sourceLineNo">051</span><a id="line.51">    /**</a>
<span class="sourceLineNo">052</span><a id="line.52">     * Check whether the given String has actual text.</a>
<span class="sourceLineNo">053</span><a id="line.53">     * More specifically, returns &lt;code&gt;true&lt;/code&gt; if the string not &lt;code&gt;null&lt;/code&gt;,</a>
<span class="sourceLineNo">054</span><a id="line.54">     * its length is greater than 0, and it contains at least one non-whitespace character.</a>
<span class="sourceLineNo">055</span><a id="line.55">     * &lt;p/&gt;</a>
<span class="sourceLineNo">056</span><a id="line.56">     * &lt;code&gt;StringUtils.hasText(null) == false&lt;br/&gt;</a>
<span class="sourceLineNo">057</span><a id="line.57">     * StringUtils.hasText("") == false&lt;br/&gt;</a>
<span class="sourceLineNo">058</span><a id="line.58">     * StringUtils.hasText(" ") == false&lt;br/&gt;</a>
<span class="sourceLineNo">059</span><a id="line.59">     * StringUtils.hasText("12345") == true&lt;br/&gt;</a>
<span class="sourceLineNo">060</span><a id="line.60">     * StringUtils.hasText(" 12345 ") == true&lt;/code&gt;</a>
<span class="sourceLineNo">061</span><a id="line.61">     * &lt;p/&gt;</a>
<span class="sourceLineNo">062</span><a id="line.62">     * &lt;p&gt;Copied from the Spring Framework while retaining all license, copyright and author information.</a>
<span class="sourceLineNo">063</span><a id="line.63">     *</a>
<span class="sourceLineNo">064</span><a id="line.64">     * @param str the String to check (may be &lt;code&gt;null&lt;/code&gt;)</a>
<span class="sourceLineNo">065</span><a id="line.65">     * @return &lt;code&gt;true&lt;/code&gt; if the String is not &lt;code&gt;null&lt;/code&gt;, its length is</a>
<span class="sourceLineNo">066</span><a id="line.66">     *         greater than 0, and it does not contain whitespace only</a>
<span class="sourceLineNo">067</span><a id="line.67">     * @see java.lang.Character#isWhitespace</a>
<span class="sourceLineNo">068</span><a id="line.68">     */</a>
<span class="sourceLineNo">069</span><a id="line.69">    public static boolean hasText(String str) {</a>
<span class="sourceLineNo">070</span><a id="line.70">        if (!hasLength(str)) {</a>
<span class="sourceLineNo">071</span><a id="line.71">            return false;</a>
<span class="sourceLineNo">072</span><a id="line.72">        }</a>
<span class="sourceLineNo">073</span><a id="line.73">        int strLen = str.length();</a>
<span class="sourceLineNo">074</span><a id="line.74">        for (int i = 0; i &lt; strLen; i++) {</a>
<span class="sourceLineNo">075</span><a id="line.75">            if (!Character.isWhitespace(str.charAt(i))) {</a>
<span class="sourceLineNo">076</span><a id="line.76">                return true;</a>
<span class="sourceLineNo">077</span><a id="line.77">            }</a>
<span class="sourceLineNo">078</span><a id="line.78">        }</a>
<span class="sourceLineNo">079</span><a id="line.79">        return false;</a>
<span class="sourceLineNo">080</span><a id="line.80">    }</a>
<span class="sourceLineNo">081</span><a id="line.81"></a>
<span class="sourceLineNo">082</span><a id="line.82">    /**</a>
<span class="sourceLineNo">083</span><a id="line.83">     * Check that the given String is neither &lt;code&gt;null&lt;/code&gt; nor of length 0.</a>
<span class="sourceLineNo">084</span><a id="line.84">     * Note: Will return &lt;code&gt;true&lt;/code&gt; for a String that purely consists of whitespace.</a>
<span class="sourceLineNo">085</span><a id="line.85">     * &lt;p/&gt;</a>
<span class="sourceLineNo">086</span><a id="line.86">     * &lt;code&gt;StringUtils.hasLength(null) == false&lt;br/&gt;</a>
<span class="sourceLineNo">087</span><a id="line.87">     * StringUtils.hasLength("") == false&lt;br/&gt;</a>
<span class="sourceLineNo">088</span><a id="line.88">     * StringUtils.hasLength(" ") == true&lt;br/&gt;</a>
<span class="sourceLineNo">089</span><a id="line.89">     * StringUtils.hasLength("Hello") == true&lt;/code&gt;</a>
<span class="sourceLineNo">090</span><a id="line.90">     * &lt;p/&gt;</a>
<span class="sourceLineNo">091</span><a id="line.91">     * Copied from the Spring Framework while retaining all license, copyright and author information.</a>
<span class="sourceLineNo">092</span><a id="line.92">     *</a>
<span class="sourceLineNo">093</span><a id="line.93">     * @param str the String to check (may be &lt;code&gt;null&lt;/code&gt;)</a>
<span class="sourceLineNo">094</span><a id="line.94">     * @return &lt;code&gt;true&lt;/code&gt; if the String is not null and has length</a>
<span class="sourceLineNo">095</span><a id="line.95">     * @see #hasText(String)</a>
<span class="sourceLineNo">096</span><a id="line.96">     */</a>
<span class="sourceLineNo">097</span><a id="line.97">    public static boolean hasLength(String str) {</a>
<span class="sourceLineNo">098</span><a id="line.98">        return (str != null &amp;&amp; str.length() &gt; 0);</a>
<span class="sourceLineNo">099</span><a id="line.99">    }</a>
<span class="sourceLineNo">100</span><a id="line.100"></a>
<span class="sourceLineNo">101</span><a id="line.101"></a>
<span class="sourceLineNo">102</span><a id="line.102">    /**</a>
<span class="sourceLineNo">103</span><a id="line.103">     * Test if the given String starts with the specified prefix,</a>
<span class="sourceLineNo">104</span><a id="line.104">     * ignoring upper/lower case.</a>
<span class="sourceLineNo">105</span><a id="line.105">     * &lt;p/&gt;</a>
<span class="sourceLineNo">106</span><a id="line.106">     * &lt;p&gt;Copied from the Spring Framework while retaining all license, copyright and author information.</a>
<span class="sourceLineNo">107</span><a id="line.107">     *</a>
<span class="sourceLineNo">108</span><a id="line.108">     * @param str    the String to check</a>
<span class="sourceLineNo">109</span><a id="line.109">     * @param prefix the prefix to look for</a>
<span class="sourceLineNo">110</span><a id="line.110">     * @return &lt;code&gt;true&lt;/code&gt; starts with the specified prefix (ignoring case), &lt;code&gt;false&lt;/code&gt; if it does not.</a>
<span class="sourceLineNo">111</span><a id="line.111">     * @see java.lang.String#startsWith</a>
<span class="sourceLineNo">112</span><a id="line.112">     */</a>
<span class="sourceLineNo">113</span><a id="line.113">    public static boolean startsWithIgnoreCase(String str, String prefix) {</a>
<span class="sourceLineNo">114</span><a id="line.114">        if (str == null || prefix == null) {</a>
<span class="sourceLineNo">115</span><a id="line.115">            return false;</a>
<span class="sourceLineNo">116</span><a id="line.116">        }</a>
<span class="sourceLineNo">117</span><a id="line.117">        if (str.startsWith(prefix)) {</a>
<span class="sourceLineNo">118</span><a id="line.118">            return true;</a>
<span class="sourceLineNo">119</span><a id="line.119">        }</a>
<span class="sourceLineNo">120</span><a id="line.120">        if (str.length() &lt; prefix.length()) {</a>
<span class="sourceLineNo">121</span><a id="line.121">            return false;</a>
<span class="sourceLineNo">122</span><a id="line.122">        }</a>
<span class="sourceLineNo">123</span><a id="line.123">        String lcStr = str.substring(0, prefix.length()).toLowerCase();</a>
<span class="sourceLineNo">124</span><a id="line.124">        String lcPrefix = prefix.toLowerCase();</a>
<span class="sourceLineNo">125</span><a id="line.125">        return lcStr.equals(lcPrefix);</a>
<span class="sourceLineNo">126</span><a id="line.126">    }</a>
<span class="sourceLineNo">127</span><a id="line.127"></a>
<span class="sourceLineNo">128</span><a id="line.128">    /**</a>
<span class="sourceLineNo">129</span><a id="line.129">     * Returns a 'cleaned' representation of the specified argument.  'Cleaned' is defined as the following:</a>
<span class="sourceLineNo">130</span><a id="line.130">     * &lt;p/&gt;</a>
<span class="sourceLineNo">131</span><a id="line.131">     * &lt;ol&gt;</a>
<span class="sourceLineNo">132</span><a id="line.132">     * &lt;li&gt;If the specified &lt;code&gt;String&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;, return &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;</a>
<span class="sourceLineNo">133</span><a id="line.133">     * &lt;li&gt;If not &lt;code&gt;null&lt;/code&gt;, {@link String#trim() trim()} it, when the trim param is set to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;</a>
<span class="sourceLineNo">134</span><a id="line.134">     * &lt;li&gt;If the trimmed string is equal to the empty String (i.e. &amp;quot;&amp;quot;), return &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;</a>
<span class="sourceLineNo">135</span><a id="line.135">     * &lt;li&gt;If the trimmed string is not the empty string, return the trimmed version&lt;/li&gt;.</a>
<span class="sourceLineNo">136</span><a id="line.136">     * &lt;/ol&gt;</a>
<span class="sourceLineNo">137</span><a id="line.137">     * &lt;p/&gt;</a>
<span class="sourceLineNo">138</span><a id="line.138">     * Therefore this method always ensures that any given string has trimmed text, and if it doesn't, &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">139</span><a id="line.139">     * is returned.</a>
<span class="sourceLineNo">140</span><a id="line.140">     *</a>
<span class="sourceLineNo">141</span><a id="line.141">     * @param in the input String to clean.</a>
<span class="sourceLineNo">142</span><a id="line.142">     * @param trim specifies whether the input String should be trimmed or not</a>
<span class="sourceLineNo">143</span><a id="line.143">     * @return a populated-but-trimmed String or &lt;code&gt;null&lt;/code&gt; otherwise</a>
<span class="sourceLineNo">144</span><a id="line.144">     */</a>
<span class="sourceLineNo">145</span><a id="line.145">    public static String clean(String in, boolean trim) {</a>
<span class="sourceLineNo">146</span><a id="line.146">        String out = in;</a>
<span class="sourceLineNo">147</span><a id="line.147"></a>
<span class="sourceLineNo">148</span><a id="line.148">        if (in != null) {</a>
<span class="sourceLineNo">149</span><a id="line.149">            if (trim) {</a>
<span class="sourceLineNo">150</span><a id="line.150">                out = in.trim();</a>
<span class="sourceLineNo">151</span><a id="line.151">            }</a>
<span class="sourceLineNo">152</span><a id="line.152">            if (out.equals(EMPTY_STRING)) {</a>
<span class="sourceLineNo">153</span><a id="line.153">                out = null;</a>
<span class="sourceLineNo">154</span><a id="line.154">            }</a>
<span class="sourceLineNo">155</span><a id="line.155">        }</a>
<span class="sourceLineNo">156</span><a id="line.156"></a>
<span class="sourceLineNo">157</span><a id="line.157">        return out;</a>
<span class="sourceLineNo">158</span><a id="line.158">    }</a>
<span class="sourceLineNo">159</span><a id="line.159"></a>
<span class="sourceLineNo">160</span><a id="line.160">    /**</a>
<span class="sourceLineNo">161</span><a id="line.161">     * Returns a 'cleaned' representation of the specified argument.  'Cleaned' is defined as the following:</a>
<span class="sourceLineNo">162</span><a id="line.162">     * &lt;p/&gt;</a>
<span class="sourceLineNo">163</span><a id="line.163">     * &lt;ol&gt;</a>
<span class="sourceLineNo">164</span><a id="line.164">     * &lt;li&gt;If the specified &lt;code&gt;String&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;, return &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;</a>
<span class="sourceLineNo">165</span><a id="line.165">     * &lt;li&gt;If not &lt;code&gt;null&lt;/code&gt;, {@link String#trim() trim()} it.&lt;/li&gt;</a>
<span class="sourceLineNo">166</span><a id="line.166">     * &lt;li&gt;If the trimmed string is equal to the empty String (i.e. &amp;quot;&amp;quot;), return &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;</a>
<span class="sourceLineNo">167</span><a id="line.167">     * &lt;li&gt;If the trimmed string is not the empty string, return the trimmed version&lt;/li&gt;.</a>
<span class="sourceLineNo">168</span><a id="line.168">     * &lt;/ol&gt;</a>
<span class="sourceLineNo">169</span><a id="line.169">     * &lt;p/&gt;</a>
<span class="sourceLineNo">170</span><a id="line.170">     * Therefore this method always ensures that any given string has trimmed text, and if it doesn't, &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">171</span><a id="line.171">     * is returned.</a>
<span class="sourceLineNo">172</span><a id="line.172">     *</a>
<span class="sourceLineNo">173</span><a id="line.173">     * @param in the input String to clean.</a>
<span class="sourceLineNo">174</span><a id="line.174">     * @return a populated-but-trimmed String or &lt;code&gt;null&lt;/code&gt; otherwise</a>
<span class="sourceLineNo">175</span><a id="line.175">     */</a>
<span class="sourceLineNo">176</span><a id="line.176">    public static String clean(String in) {</a>
<span class="sourceLineNo">177</span><a id="line.177">        return clean(in, true);</a>
<span class="sourceLineNo">178</span><a id="line.178">    }</a>
<span class="sourceLineNo">179</span><a id="line.179"></a>
<span class="sourceLineNo">180</span><a id="line.180">    /**</a>
<span class="sourceLineNo">181</span><a id="line.181">     * Returns the specified array as a comma-delimited (',') string.</a>
<span class="sourceLineNo">182</span><a id="line.182">     *</a>
<span class="sourceLineNo">183</span><a id="line.183">     * @param array the array whose contents will be converted to a string.</a>
<span class="sourceLineNo">184</span><a id="line.184">     * @return the array's contents as a comma-delimited (',') string.</a>
<span class="sourceLineNo">185</span><a id="line.185">     * @since 1.0</a>
<span class="sourceLineNo">186</span><a id="line.186">     */</a>
<span class="sourceLineNo">187</span><a id="line.187">    public static String toString(Object[] array) {</a>
<span class="sourceLineNo">188</span><a id="line.188">        return toDelimitedString(array, ",");</a>
<span class="sourceLineNo">189</span><a id="line.189">    }</a>
<span class="sourceLineNo">190</span><a id="line.190"></a>
<span class="sourceLineNo">191</span><a id="line.191">    /**</a>
<span class="sourceLineNo">192</span><a id="line.192">     * Returns the array's contents as a string, with each element delimited by the specified</a>
<span class="sourceLineNo">193</span><a id="line.193">     * {@code delimiter} argument.  Useful for {@code toString()} implementations and log messages.</a>
<span class="sourceLineNo">194</span><a id="line.194">     *</a>
<span class="sourceLineNo">195</span><a id="line.195">     * @param array     the array whose contents will be converted to a string</a>
<span class="sourceLineNo">196</span><a id="line.196">     * @param delimiter the delimiter to use between each element</a>
<span class="sourceLineNo">197</span><a id="line.197">     * @return a single string, delimited by the specified {@code delimiter}.</a>
<span class="sourceLineNo">198</span><a id="line.198">     * @since 1.0</a>
<span class="sourceLineNo">199</span><a id="line.199">     */</a>
<span class="sourceLineNo">200</span><a id="line.200">    public static String toDelimitedString(Object[] array, String delimiter) {</a>
<span class="sourceLineNo">201</span><a id="line.201">        if (array == null || array.length == 0) {</a>
<span class="sourceLineNo">202</span><a id="line.202">            return EMPTY_STRING;</a>
<span class="sourceLineNo">203</span><a id="line.203">        }</a>
<span class="sourceLineNo">204</span><a id="line.204">        StringBuilder sb = new StringBuilder();</a>
<span class="sourceLineNo">205</span><a id="line.205">        for (int i = 0; i &lt; array.length; i++) {</a>
<span class="sourceLineNo">206</span><a id="line.206">            if (i &gt; 0) {</a>
<span class="sourceLineNo">207</span><a id="line.207">                sb.append(delimiter);</a>
<span class="sourceLineNo">208</span><a id="line.208">            }</a>
<span class="sourceLineNo">209</span><a id="line.209">            sb.append(array[i]);</a>
<span class="sourceLineNo">210</span><a id="line.210">        }</a>
<span class="sourceLineNo">211</span><a id="line.211">        return sb.toString();</a>
<span class="sourceLineNo">212</span><a id="line.212">    }</a>
<span class="sourceLineNo">213</span><a id="line.213"></a>
<span class="sourceLineNo">214</span><a id="line.214">    /**</a>
<span class="sourceLineNo">215</span><a id="line.215">     * Returns the collection's contents as a string, with each element delimited by the specified</a>
<span class="sourceLineNo">216</span><a id="line.216">     * {@code delimiter} argument.  Useful for {@code toString()} implementations and log messages.</a>
<span class="sourceLineNo">217</span><a id="line.217">     *</a>
<span class="sourceLineNo">218</span><a id="line.218">     * @param c         the collection whose contents will be converted to a string</a>
<span class="sourceLineNo">219</span><a id="line.219">     * @param delimiter the delimiter to use between each element</a>
<span class="sourceLineNo">220</span><a id="line.220">     * @return a single string, delimited by the specified {@code delimiter}.</a>
<span class="sourceLineNo">221</span><a id="line.221">     * @since 1.2</a>
<span class="sourceLineNo">222</span><a id="line.222">     */</a>
<span class="sourceLineNo">223</span><a id="line.223">    public static String toDelimitedString(Collection c, String delimiter) {</a>
<span class="sourceLineNo">224</span><a id="line.224">        if (c == null || c.isEmpty()) {</a>
<span class="sourceLineNo">225</span><a id="line.225">            return EMPTY_STRING;</a>
<span class="sourceLineNo">226</span><a id="line.226">        }</a>
<span class="sourceLineNo">227</span><a id="line.227">        return join(c.iterator(), delimiter);</a>
<span class="sourceLineNo">228</span><a id="line.228">    }</a>
<span class="sourceLineNo">229</span><a id="line.229"></a>
<span class="sourceLineNo">230</span><a id="line.230">    /**</a>
<span class="sourceLineNo">231</span><a id="line.231">     * Tokenize the given String into a String array via a StringTokenizer.</a>
<span class="sourceLineNo">232</span><a id="line.232">     * Trims tokens and omits empty tokens.</a>
<span class="sourceLineNo">233</span><a id="line.233">     * &lt;p&gt;The given delimiters string is supposed to consist of any number of</a>
<span class="sourceLineNo">234</span><a id="line.234">     * delimiter characters. Each of those characters can be used to separate</a>
<span class="sourceLineNo">235</span><a id="line.235">     * tokens. A delimiter is always a single character; for multi-character</a>
<span class="sourceLineNo">236</span><a id="line.236">     * delimiters, consider using &lt;code&gt;delimitedListToStringArray&lt;/code&gt;</a>
<span class="sourceLineNo">237</span><a id="line.237">     * &lt;p/&gt;</a>
<span class="sourceLineNo">238</span><a id="line.238">     * &lt;p&gt;Copied from the Spring Framework while retaining all license, copyright and author information.</a>
<span class="sourceLineNo">239</span><a id="line.239">     *</a>
<span class="sourceLineNo">240</span><a id="line.240">     * @param str        the String to tokenize</a>
<span class="sourceLineNo">241</span><a id="line.241">     * @param delimiters the delimiter characters, assembled as String</a>
<span class="sourceLineNo">242</span><a id="line.242">     *                   (each of those characters is individually considered as delimiter).</a>
<span class="sourceLineNo">243</span><a id="line.243">     * @return an array of the tokens</a>
<span class="sourceLineNo">244</span><a id="line.244">     * @see java.util.StringTokenizer</a>
<span class="sourceLineNo">245</span><a id="line.245">     * @see java.lang.String#trim()</a>
<span class="sourceLineNo">246</span><a id="line.246">     */</a>
<span class="sourceLineNo">247</span><a id="line.247">    public static String[] tokenizeToStringArray(String str, String delimiters) {</a>
<span class="sourceLineNo">248</span><a id="line.248">        return tokenizeToStringArray(str, delimiters, true, true);</a>
<span class="sourceLineNo">249</span><a id="line.249">    }</a>
<span class="sourceLineNo">250</span><a id="line.250"></a>
<span class="sourceLineNo">251</span><a id="line.251">    /**</a>
<span class="sourceLineNo">252</span><a id="line.252">     * Tokenize the given String into a String array via a StringTokenizer.</a>
<span class="sourceLineNo">253</span><a id="line.253">     * &lt;p&gt;The given delimiters string is supposed to consist of any number of</a>
<span class="sourceLineNo">254</span><a id="line.254">     * delimiter characters. Each of those characters can be used to separate</a>
<span class="sourceLineNo">255</span><a id="line.255">     * tokens. A delimiter is always a single character; for multi-character</a>
<span class="sourceLineNo">256</span><a id="line.256">     * delimiters, consider using &lt;code&gt;delimitedListToStringArray&lt;/code&gt;</a>
<span class="sourceLineNo">257</span><a id="line.257">     * &lt;p/&gt;</a>
<span class="sourceLineNo">258</span><a id="line.258">     * &lt;p&gt;Copied from the Spring Framework while retaining all license, copyright and author information.</a>
<span class="sourceLineNo">259</span><a id="line.259">     *</a>
<span class="sourceLineNo">260</span><a id="line.260">     * @param str               the String to tokenize</a>
<span class="sourceLineNo">261</span><a id="line.261">     * @param delimiters        the delimiter characters, assembled as String</a>
<span class="sourceLineNo">262</span><a id="line.262">     *                          (each of those characters is individually considered as delimiter)</a>
<span class="sourceLineNo">263</span><a id="line.263">     * @param trimTokens        trim the tokens via String's &lt;code&gt;trim&lt;/code&gt;</a>
<span class="sourceLineNo">264</span><a id="line.264">     * @param ignoreEmptyTokens omit empty tokens from the result array</a>
<span class="sourceLineNo">265</span><a id="line.265">     *                          (only applies to tokens that are empty after trimming; StringTokenizer</a>
<span class="sourceLineNo">266</span><a id="line.266">     *                          will not consider subsequent delimiters as token in the first place).</a>
<span class="sourceLineNo">267</span><a id="line.267">     * @return an array of the tokens (&lt;code&gt;null&lt;/code&gt; if the input String</a>
<span class="sourceLineNo">268</span><a id="line.268">     *         was &lt;code&gt;null&lt;/code&gt;)</a>
<span class="sourceLineNo">269</span><a id="line.269">     * @see java.util.StringTokenizer</a>
<span class="sourceLineNo">270</span><a id="line.270">     * @see java.lang.String#trim()</a>
<span class="sourceLineNo">271</span><a id="line.271">     */</a>
<span class="sourceLineNo">272</span><a id="line.272">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">273</span><a id="line.273">    public static String[] tokenizeToStringArray(</a>
<span class="sourceLineNo">274</span><a id="line.274">            String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens) {</a>
<span class="sourceLineNo">275</span><a id="line.275"></a>
<span class="sourceLineNo">276</span><a id="line.276">        if (str == null) {</a>
<span class="sourceLineNo">277</span><a id="line.277">            return null;</a>
<span class="sourceLineNo">278</span><a id="line.278">        }</a>
<span class="sourceLineNo">279</span><a id="line.279">        StringTokenizer st = new StringTokenizer(str, delimiters);</a>
<span class="sourceLineNo">280</span><a id="line.280">        List tokens = new ArrayList();</a>
<span class="sourceLineNo">281</span><a id="line.281">        while (st.hasMoreTokens()) {</a>
<span class="sourceLineNo">282</span><a id="line.282">            String token = st.nextToken();</a>
<span class="sourceLineNo">283</span><a id="line.283">            if (trimTokens) {</a>
<span class="sourceLineNo">284</span><a id="line.284">                token = token.trim();</a>
<span class="sourceLineNo">285</span><a id="line.285">            }</a>
<span class="sourceLineNo">286</span><a id="line.286">            if (!ignoreEmptyTokens || token.length() &gt; 0) {</a>
<span class="sourceLineNo">287</span><a id="line.287">                tokens.add(token);</a>
<span class="sourceLineNo">288</span><a id="line.288">            }</a>
<span class="sourceLineNo">289</span><a id="line.289">        }</a>
<span class="sourceLineNo">290</span><a id="line.290">        return toStringArray(tokens);</a>
<span class="sourceLineNo">291</span><a id="line.291">    }</a>
<span class="sourceLineNo">292</span><a id="line.292"></a>
<span class="sourceLineNo">293</span><a id="line.293">    /**</a>
<span class="sourceLineNo">294</span><a id="line.294">     * Copy the given Collection into a String array.</a>
<span class="sourceLineNo">295</span><a id="line.295">     * The Collection must contain String elements only.</a>
<span class="sourceLineNo">296</span><a id="line.296">     * &lt;p/&gt;</a>
<span class="sourceLineNo">297</span><a id="line.297">     * &lt;p&gt;Copied from the Spring Framework while retaining all license, copyright and author information.</a>
<span class="sourceLineNo">298</span><a id="line.298">     *</a>
<span class="sourceLineNo">299</span><a id="line.299">     * @param collection the Collection to copy</a>
<span class="sourceLineNo">300</span><a id="line.300">     * @return the String array (&lt;code&gt;null&lt;/code&gt; if the passed-in</a>
<span class="sourceLineNo">301</span><a id="line.301">     *         Collection was &lt;code&gt;null&lt;/code&gt;)</a>
<span class="sourceLineNo">302</span><a id="line.302">     */</a>
<span class="sourceLineNo">303</span><a id="line.303">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">304</span><a id="line.304">    public static String[] toStringArray(Collection collection) {</a>
<span class="sourceLineNo">305</span><a id="line.305">        if (collection == null) {</a>
<span class="sourceLineNo">306</span><a id="line.306">            return null;</a>
<span class="sourceLineNo">307</span><a id="line.307">        }</a>
<span class="sourceLineNo">308</span><a id="line.308">        return (String[]) collection.toArray(new String[collection.size()]);</a>
<span class="sourceLineNo">309</span><a id="line.309">    }</a>
<span class="sourceLineNo">310</span><a id="line.310"></a>
<span class="sourceLineNo">311</span><a id="line.311">    public static String[] splitKeyValue(String aLine) throws ParseException {</a>
<span class="sourceLineNo">312</span><a id="line.312">        String line = clean(aLine);</a>
<span class="sourceLineNo">313</span><a id="line.313">        if (line == null) {</a>
<span class="sourceLineNo">314</span><a id="line.314">            return null;</a>
<span class="sourceLineNo">315</span><a id="line.315">        }</a>
<span class="sourceLineNo">316</span><a id="line.316">        String[] split = line.split(" ", 2);</a>
<span class="sourceLineNo">317</span><a id="line.317">        if (split.length != 2) {</a>
<span class="sourceLineNo">318</span><a id="line.318">            //fallback to checking for an equals sign</a>
<span class="sourceLineNo">319</span><a id="line.319">            split = line.split("=", 2);</a>
<span class="sourceLineNo">320</span><a id="line.320">            if (split.length != 2) {</a>
<span class="sourceLineNo">321</span><a id="line.321">                String msg = "Unable to determine Key/Value pair from line [" + line + "].  There is no space from " +</a>
<span class="sourceLineNo">322</span><a id="line.322">                        "which the split location could be determined.";</a>
<span class="sourceLineNo">323</span><a id="line.323">                throw new ParseException(msg, 0);</a>
<span class="sourceLineNo">324</span><a id="line.324">            }</a>
<span class="sourceLineNo">325</span><a id="line.325"></a>
<span class="sourceLineNo">326</span><a id="line.326">        }</a>
<span class="sourceLineNo">327</span><a id="line.327"></a>
<span class="sourceLineNo">328</span><a id="line.328">        split[0] = clean(split[0]);</a>
<span class="sourceLineNo">329</span><a id="line.329">        split[1] = clean(split[1]);</a>
<span class="sourceLineNo">330</span><a id="line.330">        if (split[1].startsWith("=")) {</a>
<span class="sourceLineNo">331</span><a id="line.331">            //they used spaces followed by an equals followed by zero or more spaces to split the key/value pair, so</a>
<span class="sourceLineNo">332</span><a id="line.332">            //remove the equals sign to result in only the key and values in the</a>
<span class="sourceLineNo">333</span><a id="line.333">            split[1] = clean(split[1].substring(1));</a>
<span class="sourceLineNo">334</span><a id="line.334">        }</a>
<span class="sourceLineNo">335</span><a id="line.335"></a>
<span class="sourceLineNo">336</span><a id="line.336">        if (split[0] == null) {</a>
<span class="sourceLineNo">337</span><a id="line.337">            String msg = "No valid key could be found in line [" + line + "] to form a key/value pair.";</a>
<span class="sourceLineNo">338</span><a id="line.338">            throw new ParseException(msg, 0);</a>
<span class="sourceLineNo">339</span><a id="line.339">        }</a>
<span class="sourceLineNo">340</span><a id="line.340">        if (split[1] == null) {</a>
<span class="sourceLineNo">341</span><a id="line.341">            String msg = "No corresponding value could be found in line [" + line + "] for key [" + split[0] + "]";</a>
<span class="sourceLineNo">342</span><a id="line.342">            throw new ParseException(msg, 0);</a>
<span class="sourceLineNo">343</span><a id="line.343">        }</a>
<span class="sourceLineNo">344</span><a id="line.344"></a>
<span class="sourceLineNo">345</span><a id="line.345">        return split;</a>
<span class="sourceLineNo">346</span><a id="line.346">    }</a>
<span class="sourceLineNo">347</span><a id="line.347"></a>
<span class="sourceLineNo">348</span><a id="line.348">    public static String[] split(String line) {</a>
<span class="sourceLineNo">349</span><a id="line.349">        return split(line, DEFAULT_DELIMITER_CHAR);</a>
<span class="sourceLineNo">350</span><a id="line.350">    }</a>
<span class="sourceLineNo">351</span><a id="line.351"></a>
<span class="sourceLineNo">352</span><a id="line.352">    public static String[] split(String line, char delimiter) {</a>
<span class="sourceLineNo">353</span><a id="line.353">        return split(line, delimiter, DEFAULT_QUOTE_CHAR);</a>
<span class="sourceLineNo">354</span><a id="line.354">    }</a>
<span class="sourceLineNo">355</span><a id="line.355"></a>
<span class="sourceLineNo">356</span><a id="line.356">    public static String[] split(String line, char delimiter, char quoteChar) {</a>
<span class="sourceLineNo">357</span><a id="line.357">        return split(line, delimiter, quoteChar, quoteChar);</a>
<span class="sourceLineNo">358</span><a id="line.358">    }</a>
<span class="sourceLineNo">359</span><a id="line.359"></a>
<span class="sourceLineNo">360</span><a id="line.360">    public static String[] split(String line, char delimiter, char beginQuoteChar, char endQuoteChar) {</a>
<span class="sourceLineNo">361</span><a id="line.361">        return split(line, delimiter, beginQuoteChar, endQuoteChar, false, true);</a>
<span class="sourceLineNo">362</span><a id="line.362">    }</a>
<span class="sourceLineNo">363</span><a id="line.363"></a>
<span class="sourceLineNo">364</span><a id="line.364">    /**</a>
<span class="sourceLineNo">365</span><a id="line.365">     * Splits the specified delimited String into tokens, supporting quoted tokens so that quoted strings themselves</a>
<span class="sourceLineNo">366</span><a id="line.366">     * won't be tokenized.</a>
<span class="sourceLineNo">367</span><a id="line.367">     * &lt;p/&gt;</a>
<span class="sourceLineNo">368</span><a id="line.368">     * This method's implementation is very loosely based (with significant modifications) on</a>
<span class="sourceLineNo">369</span><a id="line.369">     * &lt;a href="http://blogs.bytecode.com.au/glen"&gt;Glen Smith&lt;/a&gt;'s open-source</a>
<span class="sourceLineNo">370</span><a id="line.370">     * &lt;a href="http://opencsv.svn.sourceforge.net/viewvc/opencsv/trunk/src/au/com/bytecode/opencsv/CSVReader.java?&amp;view=markup"&gt;CSVReader.java&lt;/a&gt;</a>
<span class="sourceLineNo">371</span><a id="line.371">     * file.</a>
<span class="sourceLineNo">372</span><a id="line.372">     * &lt;p/&gt;</a>
<span class="sourceLineNo">373</span><a id="line.373">     * That file is Apache 2.0 licensed as well, making Glen's code a great starting point for us to modify to</a>
<span class="sourceLineNo">374</span><a id="line.374">     * our needs.</a>
<span class="sourceLineNo">375</span><a id="line.375">     *</a>
<span class="sourceLineNo">376</span><a id="line.376">     * @param aLine          the String to parse</a>
<span class="sourceLineNo">377</span><a id="line.377">     * @param delimiter      the delimiter by which the &lt;tt&gt;line&lt;/tt&gt; argument is to be split</a>
<span class="sourceLineNo">378</span><a id="line.378">     * @param beginQuoteChar the character signifying the start of quoted text (so the quoted text will not be split)</a>
<span class="sourceLineNo">379</span><a id="line.379">     * @param endQuoteChar   the character signifying the end of quoted text</a>
<span class="sourceLineNo">380</span><a id="line.380">     * @param retainQuotes   if the quotes themselves should be retained when constructing the corresponding token</a>
<span class="sourceLineNo">381</span><a id="line.381">     * @param trimTokens     if leading and trailing whitespace should be trimmed from discovered tokens.</a>
<span class="sourceLineNo">382</span><a id="line.382">     * @return the tokens discovered from parsing the given delimited &lt;tt&gt;line&lt;/tt&gt;.</a>
<span class="sourceLineNo">383</span><a id="line.383">     */</a>
<span class="sourceLineNo">384</span><a id="line.384">    public static String[] split(String aLine, char delimiter, char beginQuoteChar, char endQuoteChar,</a>
<span class="sourceLineNo">385</span><a id="line.385">                                 boolean retainQuotes, boolean trimTokens) {</a>
<span class="sourceLineNo">386</span><a id="line.386">        String line = clean(aLine);</a>
<span class="sourceLineNo">387</span><a id="line.387">        if (line == null) {</a>
<span class="sourceLineNo">388</span><a id="line.388">            return null;</a>
<span class="sourceLineNo">389</span><a id="line.389">        }</a>
<span class="sourceLineNo">390</span><a id="line.390"></a>
<span class="sourceLineNo">391</span><a id="line.391">        List&lt;String&gt; tokens = new ArrayList&lt;String&gt;();</a>
<span class="sourceLineNo">392</span><a id="line.392">        StringBuilder sb = new StringBuilder();</a>
<span class="sourceLineNo">393</span><a id="line.393">        boolean inQuotes = false;</a>
<span class="sourceLineNo">394</span><a id="line.394"></a>
<span class="sourceLineNo">395</span><a id="line.395">        for (int i = 0; i &lt; line.length(); i++) {</a>
<span class="sourceLineNo">396</span><a id="line.396"></a>
<span class="sourceLineNo">397</span><a id="line.397">            char c = line.charAt(i);</a>
<span class="sourceLineNo">398</span><a id="line.398">            if (c == beginQuoteChar) {</a>
<span class="sourceLineNo">399</span><a id="line.399">                // this gets complex... the quote may end a quoted block, or escape another quote.</a>
<span class="sourceLineNo">400</span><a id="line.400">                // do a 1-char lookahead:</a>
<span class="sourceLineNo">401</span><a id="line.401">                if (inQuotes  // we are in quotes, therefore there can be escaped quotes in here.</a>
<span class="sourceLineNo">402</span><a id="line.402">                        &amp;&amp; line.length() &gt; (i + 1)  // there is indeed another character to check.</a>
<span class="sourceLineNo">403</span><a id="line.403">                        &amp;&amp; line.charAt(i + 1) == beginQuoteChar) { // ..and that char. is a quote also.</a>
<span class="sourceLineNo">404</span><a id="line.404">                    // we have two quote chars in a row == one quote char, so consume them both and</a>
<span class="sourceLineNo">405</span><a id="line.405">                    // put one on the token. we do *not* exit the quoted text.</a>
<span class="sourceLineNo">406</span><a id="line.406">                    sb.append(line.charAt(i + 1));</a>
<span class="sourceLineNo">407</span><a id="line.407">                    i++;</a>
<span class="sourceLineNo">408</span><a id="line.408">                } else {</a>
<span class="sourceLineNo">409</span><a id="line.409">                    inQuotes = !inQuotes;</a>
<span class="sourceLineNo">410</span><a id="line.410">                    if (retainQuotes) {</a>
<span class="sourceLineNo">411</span><a id="line.411">                        sb.append(c);</a>
<span class="sourceLineNo">412</span><a id="line.412">                    }</a>
<span class="sourceLineNo">413</span><a id="line.413">                }</a>
<span class="sourceLineNo">414</span><a id="line.414">            } else if (c == endQuoteChar) {</a>
<span class="sourceLineNo">415</span><a id="line.415">                inQuotes = !inQuotes;</a>
<span class="sourceLineNo">416</span><a id="line.416">                if (retainQuotes) {</a>
<span class="sourceLineNo">417</span><a id="line.417">                    sb.append(c);</a>
<span class="sourceLineNo">418</span><a id="line.418">                }</a>
<span class="sourceLineNo">419</span><a id="line.419">            } else if (c == delimiter &amp;&amp; !inQuotes) {</a>
<span class="sourceLineNo">420</span><a id="line.420">                String s = sb.toString();</a>
<span class="sourceLineNo">421</span><a id="line.421">                if (trimTokens) {</a>
<span class="sourceLineNo">422</span><a id="line.422">                    s = s.trim();</a>
<span class="sourceLineNo">423</span><a id="line.423">                }</a>
<span class="sourceLineNo">424</span><a id="line.424">                tokens.add(s);</a>
<span class="sourceLineNo">425</span><a id="line.425">                sb = new StringBuilder(); // start work on next token</a>
<span class="sourceLineNo">426</span><a id="line.426">            } else {</a>
<span class="sourceLineNo">427</span><a id="line.427">                sb.append(c);</a>
<span class="sourceLineNo">428</span><a id="line.428">            }</a>
<span class="sourceLineNo">429</span><a id="line.429">        }</a>
<span class="sourceLineNo">430</span><a id="line.430">        String s = sb.toString();</a>
<span class="sourceLineNo">431</span><a id="line.431">        if (trimTokens) {</a>
<span class="sourceLineNo">432</span><a id="line.432">            s = s.trim();</a>
<span class="sourceLineNo">433</span><a id="line.433">        }</a>
<span class="sourceLineNo">434</span><a id="line.434">        tokens.add(s);</a>
<span class="sourceLineNo">435</span><a id="line.435">        return tokens.toArray(new String[tokens.size()]);</a>
<span class="sourceLineNo">436</span><a id="line.436">    }</a>
<span class="sourceLineNo">437</span><a id="line.437"></a>
<span class="sourceLineNo">438</span><a id="line.438">    /**</a>
<span class="sourceLineNo">439</span><a id="line.439">     * Joins the elements of the provided {@code Iterator} into</a>
<span class="sourceLineNo">440</span><a id="line.440">     * a single String containing the provided elements.&lt;/p&gt;</a>
<span class="sourceLineNo">441</span><a id="line.441">     * &lt;p/&gt;</a>
<span class="sourceLineNo">442</span><a id="line.442">     * No delimiter is added before or after the list.</a>
<span class="sourceLineNo">443</span><a id="line.443">     * A {@code null} separator is the same as an empty String ("").&lt;/p&gt;</a>
<span class="sourceLineNo">444</span><a id="line.444">     * &lt;p/&gt;</a>
<span class="sourceLineNo">445</span><a id="line.445">     * Copied from Commons Lang, version 3 (r1138702).&lt;/p&gt;</a>
<span class="sourceLineNo">446</span><a id="line.446">     *</a>
<span class="sourceLineNo">447</span><a id="line.447">     * @param iterator  the {@code Iterator} of values to join together, may be null</a>
<span class="sourceLineNo">448</span><a id="line.448">     * @param separator the separator character to use, null treated as ""</a>
<span class="sourceLineNo">449</span><a id="line.449">     * @return the joined String, {@code null} if null iterator input</a>
<span class="sourceLineNo">450</span><a id="line.450">     * @since 1.2</a>
<span class="sourceLineNo">451</span><a id="line.451">     */</a>
<span class="sourceLineNo">452</span><a id="line.452">    public static String join(Iterator&lt;?&gt; iterator, String separator) {</a>
<span class="sourceLineNo">453</span><a id="line.453">        final String empty = "";</a>
<span class="sourceLineNo">454</span><a id="line.454"></a>
<span class="sourceLineNo">455</span><a id="line.455">        // handle null, zero and one elements before building a buffer</a>
<span class="sourceLineNo">456</span><a id="line.456">        if (iterator == null) {</a>
<span class="sourceLineNo">457</span><a id="line.457">            return null;</a>
<span class="sourceLineNo">458</span><a id="line.458">        }</a>
<span class="sourceLineNo">459</span><a id="line.459">        if (!iterator.hasNext()) {</a>
<span class="sourceLineNo">460</span><a id="line.460">            return empty;</a>
<span class="sourceLineNo">461</span><a id="line.461">        }</a>
<span class="sourceLineNo">462</span><a id="line.462">        Object first = iterator.next();</a>
<span class="sourceLineNo">463</span><a id="line.463">        if (!iterator.hasNext()) {</a>
<span class="sourceLineNo">464</span><a id="line.464">            return first == null ? empty : first.toString();</a>
<span class="sourceLineNo">465</span><a id="line.465">        }</a>
<span class="sourceLineNo">466</span><a id="line.466"></a>
<span class="sourceLineNo">467</span><a id="line.467">        // two or more elements</a>
<span class="sourceLineNo">468</span><a id="line.468">        StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small</a>
<span class="sourceLineNo">469</span><a id="line.469">        if (first != null) {</a>
<span class="sourceLineNo">470</span><a id="line.470">            buf.append(first);</a>
<span class="sourceLineNo">471</span><a id="line.471">        }</a>
<span class="sourceLineNo">472</span><a id="line.472"></a>
<span class="sourceLineNo">473</span><a id="line.473">        while (iterator.hasNext()) {</a>
<span class="sourceLineNo">474</span><a id="line.474">            if (separator != null) {</a>
<span class="sourceLineNo">475</span><a id="line.475">                buf.append(separator);</a>
<span class="sourceLineNo">476</span><a id="line.476">            }</a>
<span class="sourceLineNo">477</span><a id="line.477">            Object obj = iterator.next();</a>
<span class="sourceLineNo">478</span><a id="line.478">            if (obj != null) {</a>
<span class="sourceLineNo">479</span><a id="line.479">                buf.append(obj);</a>
<span class="sourceLineNo">480</span><a id="line.480">            }</a>
<span class="sourceLineNo">481</span><a id="line.481">        }</a>
<span class="sourceLineNo">482</span><a id="line.482">        return buf.toString();</a>
<span class="sourceLineNo">483</span><a id="line.483">    }</a>
<span class="sourceLineNo">484</span><a id="line.484"></a>
<span class="sourceLineNo">485</span><a id="line.485">    /**</a>
<span class="sourceLineNo">486</span><a id="line.486">     * Splits the {@code delimited} string (delimited by the specified {@code separator} character) and returns the</a>
<span class="sourceLineNo">487</span><a id="line.487">     * delimited values as a {@code Set}.</a>
<span class="sourceLineNo">488</span><a id="line.488">     * &lt;p/&gt;</a>
<span class="sourceLineNo">489</span><a id="line.489">     * If either argument is {@code null}, this method returns {@code null}.</a>
<span class="sourceLineNo">490</span><a id="line.490">     *</a>
<span class="sourceLineNo">491</span><a id="line.491">     * @param delimited the string to split</a>
<span class="sourceLineNo">492</span><a id="line.492">     * @param separator the character that delineates individual tokens to split</a>
<span class="sourceLineNo">493</span><a id="line.493">     * @return the delimited values as a {@code Set}.</a>
<span class="sourceLineNo">494</span><a id="line.494">     * @since 1.2</a>
<span class="sourceLineNo">495</span><a id="line.495">     */</a>
<span class="sourceLineNo">496</span><a id="line.496">    public static Set&lt;String&gt; splitToSet(String delimited, String separator) {</a>
<span class="sourceLineNo">497</span><a id="line.497">        if (delimited == null || separator == null) {</a>
<span class="sourceLineNo">498</span><a id="line.498">            return null;</a>
<span class="sourceLineNo">499</span><a id="line.499">        }</a>
<span class="sourceLineNo">500</span><a id="line.500">        String[] split = split(delimited, separator.charAt(0));</a>
<span class="sourceLineNo">501</span><a id="line.501">        return asSet(split);</a>
<span class="sourceLineNo">502</span><a id="line.502">    }</a>
<span class="sourceLineNo">503</span><a id="line.503"></a>
<span class="sourceLineNo">504</span><a id="line.504">    /**</a>
<span class="sourceLineNo">505</span><a id="line.505">     * Returns the input argument, but ensures the first character is capitalized (if possible).</a>
<span class="sourceLineNo">506</span><a id="line.506">     * @param in the string to uppercase the first character.</a>
<span class="sourceLineNo">507</span><a id="line.507">     * @return the input argument, but with the first character capitalized (if possible).</a>
<span class="sourceLineNo">508</span><a id="line.508">     * @since 1.2</a>
<span class="sourceLineNo">509</span><a id="line.509">     */</a>
<span class="sourceLineNo">510</span><a id="line.510">    public static String uppercaseFirstChar(String in) {</a>
<span class="sourceLineNo">511</span><a id="line.511">        if (in == null || in.length() == 0) {</a>
<span class="sourceLineNo">512</span><a id="line.512">            return in;</a>
<span class="sourceLineNo">513</span><a id="line.513">        }</a>
<span class="sourceLineNo">514</span><a id="line.514">        int length = in.length();</a>
<span class="sourceLineNo">515</span><a id="line.515">        StringBuilder sb = new StringBuilder(length);</a>
<span class="sourceLineNo">516</span><a id="line.516"></a>
<span class="sourceLineNo">517</span><a id="line.517">        sb.append(Character.toUpperCase(in.charAt(0)));</a>
<span class="sourceLineNo">518</span><a id="line.518">        if (length &gt; 1) {</a>
<span class="sourceLineNo">519</span><a id="line.519">            String remaining = in.substring(1);</a>
<span class="sourceLineNo">520</span><a id="line.520">            sb.append(remaining);</a>
<span class="sourceLineNo">521</span><a id="line.521">        }</a>
<span class="sourceLineNo">522</span><a id="line.522">        return sb.toString();</a>
<span class="sourceLineNo">523</span><a id="line.523">    }</a>
<span class="sourceLineNo">524</span><a id="line.524"></a>
<span class="sourceLineNo">525</span><a id="line.525">    //////////////////////////</a>
<span class="sourceLineNo">526</span><a id="line.526">    // From CollectionUtils //</a>
<span class="sourceLineNo">527</span><a id="line.527">    //////////////////////////</a>
<span class="sourceLineNo">528</span><a id="line.528">    // CollectionUtils cannot be removed from shiro-core until 2.0 as it has a dependency on PrincipalCollection</a>
<span class="sourceLineNo">529</span><a id="line.529"></a>
<span class="sourceLineNo">530</span><a id="line.530"></a>
<span class="sourceLineNo">531</span><a id="line.531">    private static &lt;E&gt; Set&lt;E&gt; asSet(E... elements) {</a>
<span class="sourceLineNo">532</span><a id="line.532">        if (elements == null || elements.length == 0) {</a>
<span class="sourceLineNo">533</span><a id="line.533">            return Collections.emptySet();</a>
<span class="sourceLineNo">534</span><a id="line.534">        }</a>
<span class="sourceLineNo">535</span><a id="line.535"></a>
<span class="sourceLineNo">536</span><a id="line.536">        if (elements.length == 1) {</a>
<span class="sourceLineNo">537</span><a id="line.537">            return Collections.singleton(elements[0]);</a>
<span class="sourceLineNo">538</span><a id="line.538">        }</a>
<span class="sourceLineNo">539</span><a id="line.539"></a>
<span class="sourceLineNo">540</span><a id="line.540">        LinkedHashSet&lt;E&gt; set = new LinkedHashSet&lt;E&gt;(elements.length * 4 / 3 + 1);</a>
<span class="sourceLineNo">541</span><a id="line.541">        Collections.addAll(set, elements);</a>
<span class="sourceLineNo">542</span><a id="line.542">        return set;</a>
<span class="sourceLineNo">543</span><a id="line.543">    }</a>
<span class="sourceLineNo">544</span><a id="line.544"></a>
<span class="sourceLineNo">545</span><a id="line.545">}</a>




























































</pre>
</div>
</main>
</body>
</html>
