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   */
62  public class StringUtils {
63  
64      /**
65       * <p>Replace all occurrences of a String within another String.</p>
66       *
67       * <p>A <code>null</code> reference passed to this method is a no-op.</p>
68       *
69       * @see #replace(String text, String repl, String with, int max)
70       * @param text text to search and replace in
71       * @param repl String to search for
72       * @param with String to replace with
73       * @return the text with any replacements processed
74       */
75      public static String replace(String text, String repl, String with) {
76          return replace(text, repl, with, -1);
77      }
78  
79      /**
80       * <p>Replace a String with another String inside a larger String,
81       * for the first <code>max</code> values of the search String.</p>
82       *
83       * <p>A <code>null</code> reference passed to this method is a no-op.</p>
84       *
85       * @param text text to search and replace in
86       * @param repl String to search for
87       * @param with String to replace with
88       * @param max maximum number of values to replace, or <code>-1</code> if no maximum
89       * @return the text with any replacements processed
90       */
91      public static String replace(String text, String repl, String with, int max) {
92          if ((text == null) || (repl == null) || (with == null) || (repl.length() == 0)) {
93              return text;
94          }
95  
96          StringBuilder buf = new StringBuilder(text.length());
97          int start = 0, end;
98          while ((end = text.indexOf(repl, start)) != -1) {
99              buf.append(text, start, end).append(with);
100             start = end + repl.length();
101 
102             if (--max == 0) {
103                 break;
104             }
105         }
106         buf.append(text, start, text.length());
107         return buf.toString();
108     }
109 
110     public static String capitalizeFirstLetter(String data) {
111         char firstChar = data.charAt(0);
112         char titleCase = Character.toTitleCase(firstChar);
113         if (firstChar == titleCase) {
114             return data;
115         }
116         StringBuilder result = new StringBuilder(data.length());
117         result.append(titleCase);
118         result.append(data, 1, data.length());
119         return result.toString();
120     }
121 }