001// Copyright 2004, 2005 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.hivemind.util;
016
017import java.util.ArrayList;
018import java.util.List;
019
020/**
021 * A subset of the utilities available in commons-lang StringUtils. It's all
022 * about reducing dependencies, baby!
023 *
024 * @author Howard Lewis Ship
025 */
026public class StringUtils
027{
028
029    /**
030     * Splits an input string into a an array of strings, seperating
031     * at commas.
032     * 
033     * @param input the string to split, possibly null or empty
034     * @return an array of the strings split at commas
035     */
036    public static String[] split(String input)
037    {
038        if (input == null)
039            return new String[0];
040
041        List strings = new ArrayList();
042
043        int startx = 0;
044        int cursor = 0;
045        int length = input.length();
046
047        while (cursor < length)
048        {
049            if (input.charAt(cursor) == ',')
050            {
051                String item = input.substring(startx, cursor);
052                strings.add(item);
053                startx = cursor + 1;
054            }
055
056            cursor++;
057        }
058
059        if (startx < length)
060            strings.add(input.substring(startx));
061
062        return (String[]) strings.toArray(new String[strings.size()]);
063    }
064
065    /**
066     * Converts a string such that the first character is upper case.
067     * 
068     * @param input the input string (possibly empty)
069     * @return the string with the first character converted from lowercase to upper case (may
070     * return the string unchanged if already capitalized)
071     */
072
073    public static String capitalize(String input)
074    {
075        if (input.length() == 0)
076            return input;
077
078        char ch = input.charAt(0);
079
080        if (Character.isUpperCase(ch))
081            return input;
082
083        return String.valueOf(Character.toUpperCase(ch)) + input.substring(1);
084    }
085
086    public static String join(String[] input, char separator)
087    {
088        if (input == null || input.length == 0)
089            return null;
090
091        StringBuffer buffer = new StringBuffer();
092
093        for (int i = 0; i < input.length; i++)
094        {
095            if (i > 0)
096                buffer.append(separator);
097
098            buffer.append(input[i]);
099        }
100
101        return buffer.toString();
102    }
103
104    /**
105     * Replaces all occurrences of <code>pattern</code> in
106     * <code>string</code> with <code>replacement</code>
107     */
108    public static String replace(String string, String pattern, String replacement)
109    {
110        StringBuffer sbuf = new StringBuffer();
111        int index = string.indexOf(pattern);
112        int pos = 0;
113        int patternLength = pattern.length();
114        for(; index >= 0; index = string.indexOf(pattern, pos))
115        {
116            sbuf.append(string.substring(pos, index));
117            sbuf.append(replacement);
118            pos = index + patternLength;
119        }
120        sbuf.append(string.substring(pos));
121        
122        return sbuf.toString();
123    }
124    
125}