View Javadoc
1   /* ====================================================================
2    * The Apache Software License, Version 1.1
3    *
4    * Copyright (c) 2002 The Apache Software Foundation.  All rights
5    * reserved.
6    *
7    * Redistribution and use in source and binary forms, with or without
8    * modification, are permitted provided that the following conditions
9    * are met:
10   *
11   * 1. Redistributions of source code must retain the above copyright
12   *    notice, this list of conditions and the following disclaimer.
13   *
14   * 2. Redistributions in binary form must reproduce the above copyright
15   *    notice, this list of conditions and the following disclaimer in
16   *    the documentation and/or other materials provided with the
17   *    distribution.
18   *
19   * 3. The end-user documentation included with the redistribution, if
20   *    any, must include the following acknowlegement:
21   *       "This product includes software developed by the
22   *        Apache Software Foundation (http://www.codehaus.org/)."
23   *    Alternately, this acknowlegement may appear in the software itself,
24   *    if and wherever such third-party acknowlegements normally appear.
25   *
26   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
27   *    Foundation" must not be used to endorse or promote products derived
28   *    from this software without prior written permission. For written
29   *    permission, please contact codehaus@codehaus.org.
30   *
31   * 5. Products derived from this software may not be called "Apache"
32   *    nor may "Apache" appear in their names without prior written
33   *    permission of the Apache Software Foundation.
34   *
35   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46   * SUCH DAMAGE.
47   * ====================================================================
48   *
49   * This software consists of voluntary contributions made by many
50   * individuals on behalf of the Apache Software Foundation.  For more
51   * information on the Apache Software Foundation, please see
52   * <http://www.codehaus.org/>.
53   */
54  package org.codehaus.plexus.interpolation.util;
55  
56  /**
57   * Code here was swiped from plexus-utils' StringUtils class, so
58   * plexus-interpolation could be completely self-contained.
59   *
60   * @author jdcasey
61   * @version $Id$
62   */
63  public class StringUtils
64  {
65  
66      /**
67       * <p>Replace all occurances of a String within another String.</p>
68       *
69       * <p>A <code>null</code> reference passed to this method is a no-op.</p>
70       *
71       * @see #replace(String text, String repl, String with, int max)
72       * @param text text to search and replace in
73       * @param repl String to search for
74       * @param with String to replace with
75       * @return the text with any replacements processed
76       */
77      public static String replace( String text, String repl, String with )
78      {
79          return replace( text, repl, with, -1 );
80      }
81  
82      /**
83       * <p>Replace a String with another String inside a larger String,
84       * for the first <code>max</code> values of the search String.</p>
85       *
86       * <p>A <code>null</code> reference passed to this method is a no-op.</p>
87       *
88       * @param text text to search and replace in
89       * @param repl String to search for
90       * @param with String to replace with
91       * @param max maximum number of values to replace, or <code>-1</code> if no maximum
92       * @return the text with any replacements processed
93       */
94      public static String replace( String text, String repl, String with, int max )
95      {
96          if ( ( text == null ) || ( repl == null ) || ( with == null ) || ( repl.length() == 0 ) )
97          {
98              return text;
99          }
100 
101         StringBuilder buf = new StringBuilder( text.length() );
102         int start = 0, end;
103         while ( ( end = text.indexOf( repl, start ) ) != -1 )
104         {
105             buf.append( text, start, end ).append( with );
106             start = end + repl.length();
107 
108             if ( --max == 0 )
109             {
110                 break;
111             }
112         }
113         buf.append( text, start, text.length());
114         return buf.toString();
115     }
116 
117     public static String capitalizeFirstLetter( String data )
118     {
119         char firstChar = data.charAt( 0 );
120         char titleCase = Character.toTitleCase( firstChar );
121         if (firstChar == titleCase)
122         {
123             return data;
124         }
125         StringBuilder result = new StringBuilder( data.length() );
126         result.append( titleCase );
127         result.append(  data, 1, data.length() );
128         return result.toString();
129     }
130 
131 }