001 /*
002 * cs101 String utilities
003 * $Id: StringUtils.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $
004 *
005 * Developed for "Rethinking CS101", a project of Lynn Andrea Stein's AP Group.
006 * For more information, see <a href="http://www.ai.mit.edu/projects/cs101/">the
007 * CS101 homepage</a> or email <las@ai.mit.edu>.
008 *
009 * Copyright (C) 1996 Massachusetts Institute of Technology.
010 * Please do not redistribute without obtaining permission.
011 */
012
013 package cs101.util;
014
015 /**
016 * cs101.util.StringUtils implements some string utility functions.
017 * It is intended as a library class, i.e., all methods are static.
018 * <br>
019 * Copyright 1996 Massachusetts Institute of Technology
020 *
021 * @author Lynn Andrea Stein, las@ai.mit.edu
022 * @version $Id: StringUtils.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $
023 *
024 */
025 public final class StringUtils {
026 /**
027 * A string containing the non-word characters a user might
028 * reasonably be expected to type at a semi-standard American
029 * keyboard. Suitable for using as delimiters for
030 * java.util.StringTokenizer.
031 *
032 * @see java.util.StringTokenizer
033 */
034 public static final String nonWordChars
035 = "!@#$%^&*()_-+=|`~<>,.?/:;\"\' \t\n\b\f\r{}[]\\";
036
037 /**
038 * Determines whether its argument is a word or a delimiter as
039 * defined by a java.util.StringTokenizer when initialized with
040 * StringUtils.nonWordChars as a delimiter string.
041 *
042 * @param word String to be tested for "wordness".
043 *
044 * @return false if word is one of the delimiters in
045 * StringUtils.nonWordChars, true otherwise.
046 *
047 * @see java.util.StringTokenizer
048 * @see #nonWordChars
049 * @see java.lang.String
050 */
051 public static final boolean wordP (String word) {
052 return ( (! (word.length() == 1))
053 || (StringUtils.nonWordChars.indexOf(word.charAt(0)) == -1 ));
054 }
055
056 /**
057 * Determines whether the first character of its argument word is
058 * upper case.
059 *
060 * @param word String to be checked for capitalization.
061 *
062 * @return true if first character is upper case.
063 *
064 * @see java.lang.Character#isUpperCase
065 * @see java.lang.String#charAt
066 */
067 public static final boolean capitalizedP (String word) {
068 return Character.isUpperCase(word.charAt(0));
069 }
070
071
072 /**
073 * Determines whether all of the characters in its argument word are
074 * upper case.
075 *
076 * @param word String to be checked for capitalization.
077 *
078 * @return true if all characters are is upper case.
079 *
080 * @see java.lang.Character#isLowerCase
081 * @see java.lang.String#charAt
082 * @see java.lang.String#length
083 */
084 public static final boolean allUpperCaseP (String word) {
085 for (int i = 0; i < word.length(); i++) {
086 if (Character.isLowerCase(word.charAt(i))) {
087 return false;
088 }
089 }
090 return true;
091 }
092
093 /**
094 * Constructs a new string identical to its argument, but with the
095 * first character replaced by its upper case equivalent.
096 *
097 * @param word String to be capitalized.
098 *
099 * @return the new, capitalized String.
100 *
101 * @see java.lang.Character#toUpperCase
102 * @see java.lang.StringBuffer
103 * @see java.lang.String#charAt
104 * @see java.lang.String#valueOf
105 */
106 public static final String capitalize (String word) {
107 if (word.length() == 1) {
108 return ( String.valueOf(Character.toUpperCase(word.charAt(0))) );
109 } else {
110 return ( String.valueOf(Character.toUpperCase(word.charAt(0)))
111 + word.substring(1) );
112 }
113 }
114
115 /**
116 * Constructs a new string identical to its argument, but with all
117 * characters replaced by their upper case equivalents.
118 *
119 * @param word String to be uppercased.
120 *
121 * @return the new, uppercased String.
122 *
123 * @see java.lang.Character#toUpperCase
124 * @see java.lang.String#length
125 * @see java.lang.String#charAt
126 * @see java.lang.StringBuffer
127 */
128 public static final String capitalizeAll (String word) {
129 StringBuffer tmp = new StringBuffer (word.length());
130
131 for (int i = 0; i < word.length(); i++) {
132 tmp.insert (i, Character.toUpperCase(word.charAt (i)));
133 }
134 return tmp.toString();
135 }
136
137 /**
138 * Constructs a new string identical to its argument, but with the
139 * first character replaced by its lower case equivalent.
140 *
141 * @param word String to be unCapitalized.
142 *
143 * @return the new, unCapitalized String.
144 *
145 * @see java.lang.Character#toLowerCase
146 * @see java.lang.String#length
147 * @see java.lang.String#charAt
148 * @see java.lang.String#valueOf
149 */
150 public static final String unCapitalize (String word) {
151 if (word.length() == 1) {
152 return ( String.valueOf(Character.toLowerCase(word.charAt(0))) );
153 } else {
154 return ( String.valueOf(Character.toLowerCase(word.charAt(0)))
155 + word.substring(1) );
156 }
157 }
158
159 /**
160 * Computes the index of the first position in String which
161 * contains a vowel (i.e., one of AEIOU).
162 *
163 * @param word String to be searched for vowel.
164 *
165 * @return index of first vowel, length of word if no vowel.
166 *
167 * @see java.lang.String#length
168 * @see java.lang.String#charAt
169 */
170 public static final int firstVowelPos ( String word ) {
171 int i = 0, length = word.length();
172
173 LETTER:
174 for(i = 0; i < length; i++) {
175 switch(word.charAt(i)) {
176 case 'a': case 'A':
177 case 'e': case 'E':
178 case 'i': case 'I':
179 case 'o': case 'O':
180 case 'u': case 'U': break LETTER;
181 default:
182 }
183 }
184 if (i == length) {
185 return 0;
186 } else {
187 return i;
188 }
189
190 }
191
192 /**
193 * Prevent instantiation
194 */
195 private StringUtils() {}
196 }
197
198 /* Comments:
199 *
200 * History:
201 * $Log: StringUtils.java,v $
202 * Revision 1.1.1.1 2002/06/05 21:56:32 root
203 * CS101 comes to Olin finally.
204 *
205 * Revision 1.3 1998/07/24 17:19:35 tparnell
206 * Placate new javadoc behavior
207 *
208 * Revision 1.2 1998/07/21 19:44:07 tparnell
209 * added private StringUtils()
210 *
211 * Revision 1.1 1998/03/13 22:18:23 tparnell
212 * Import from server crash. I think the src and class files match up.
213 *
214 * Revision 1.4 1996/08/01 18:26:33 reuben
215 * More javadoc tweaking (hopefully the final pass)
216 *
217 * Revision 1.3 1996/08/01 16:23:30 reuben
218 * Fixed javadoc problem.
219 *
220 * Revision 1.2 1996/07/30 17:26:01 reuben
221 * Added/corrected javadoc comments.
222 *
223 * Revision 1.1.1.1 1996/07/18 17:38:24 sit
224 * Import from /mit/6.096/share/classes after 6.80s session
225 *
226 * Revision 1.3 1996/06/19 23:04:57 las
227 * Cleanerer.
228 *
229 * Revision 1.2 1996/06/19 22:48:05 las
230 * Cleaned up documentation.
231 *
232 * 6-19-96 Documentation cleaned up by las@ai.mit.edu
233 * 6-18-96 Created by las@ai.mit.edu
234 *
235 *
236 */
237
238
239
240
241