001: /*
002: License $Id: StringHelper.java,v 1.8 2005/07/06 18:31:00 hendriks73 Exp $
003:
004: Copyright (c) 2001-2005 tagtraum industries.
005:
006: LGPL
007: ====
008:
009: jo! is free software; you can redistribute it and/or
010: modify it under the terms of the GNU Lesser General Public
011: License as published by the Free Software Foundation; either
012: version 2.1 of the License, or (at your option) any later version.
013:
014: jo! is distributed in the hope that it will be useful,
015: but WITHOUT ANY WARRANTY; without even the implied warranty of
016: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017: Lesser General Public License for more details.
018:
019: You should have received a copy of the GNU Lesser General Public
020: License along with this library; if not, write to the Free Software
021: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022:
023: For LGPL see <http://www.fsf.org/copyleft/lesser.txt>
024:
025:
026: Sun license
027: ===========
028:
029: This release contains software by Sun Microsystems. Therefore
030: the following conditions have to be met, too. They apply to the
031: files
032:
033: - lib/mail.jar
034: - lib/activation.jar
035: - lib/jsse.jar
036: - lib/jcert.jar
037: - lib/jaxp.jar
038: - lib/crimson.jar
039: - lib/servlet.jar
040: - lib/jnet.jar
041: - lib/jaas.jar
042: - lib/jaasmod.jar
043:
044: contained in this release.
045:
046: a. Licensee may not modify the Java Platform
047: Interface (JPI, identified as classes contained within the javax
048: package or any subpackages of the javax package), by creating additional
049: classes within the JPI or otherwise causing the addition to or modification
050: of the classes in the JPI. In the event that Licensee creates any
051: Java-related API and distribute such API to others for applet or
052: application development, you must promptly publish broadly, an accurate
053: specification for such API for free use by all developers of Java-based
054: software.
055:
056: b. Software is confidential copyrighted information of Sun and
057: title to all copies is retained by Sun and/or its licensors. Licensee
058: shall not modify, decompile, disassemble, decrypt, extract, or otherwise
059: reverse engineer Software. Software may not be leased, assigned, or
060: sublicensed, in whole or in part. Software is not designed or intended
061: for use in on-line control of aircraft, air traffic, aircraft navigation
062: or aircraft communications; or in the design, construction, operation or
063: maintenance of any nuclear facility. Licensee warrants that it will not
064: use or redistribute the Software for such purposes.
065:
066: c. Software is provided "AS IS," without a warranty
067: of any kind. ALL EXPRESS OR IMPLIED REPRESENTATIONS AND WARRANTIES,
068: INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
069: PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
070:
071: d. This License is effective until terminated. Licensee may
072: terminate this License at any time by destroying all copies of Software.
073: This License will terminate immediately without notice from Sun if Licensee
074: fails to comply with any provision of this License. Upon such termination,
075: Licensee must destroy all copies of Software.
076:
077: e. Software, including technical data, is subject to U.S.
078: export control laws, including the U.S. Export Administration Act and its
079: associated regulations, and may be subject to export or import regulations
080: in other countries. Licensee agrees to comply strictly with all such
081: regulations and acknowledges that it has the responsibility to obtain
082: licenses to export, re-export, or import Software. Software may not be
083: downloaded, or otherwise exported or re-exported (i) into, or to a national
084: or resident of, Cuba, Iraq, Iran, North Korea, Libya, Sudan, Syria or any
085: country to which the U.S. has embargoed goods; or (ii) to anyone on the
086: U.S. Treasury Department's list of Specially Designated Nations or the U.S.
087: Commerce Department's Table of Denial Orders.
088:
089:
090: Feedback
091: ========
092:
093: We encourage your feedback and suggestions and want to use your feedback to
094: improve the Software. Send all such feedback to:
095: <feedback@tagtraum.com>
096:
097: For more information on tagtraum industries and jo!
098: please see <http://www.tagtraum.com/>.
099:
100:
101: */
102: package com.tagtraum.framework.util;
103:
104: /**
105: *
106: *
107: * @author Hendrik Schreiber
108: * @version 1.1beta1 $Id: StringHelper.java,v 1.8 2005/07/06 18:31:00 hendriks73 Exp $
109: */
110: public final class StringHelper {
111:
112: /**
113: * Source-Version
114: */
115: public static String vcid = "$Id: StringHelper.java,v 1.8 2005/07/06 18:31:00 hendriks73 Exp $";
116:
117: /**
118: * Replaces a substring.
119: */
120: public static final String replace(String fullString,
121: String toReplace, String replacement) {
122: int idx = fullString.indexOf(toReplace);
123: if (idx == -1) {
124: return fullString;
125: }
126: StringBuffer sb = new StringBuffer();
127: sb.append(fullString.substring(0, idx));
128: sb.append(replacement);
129: sb.append(fullString.substring(idx + toReplace.length(),
130: fullString.length()));
131: String result = sb.toString();
132: if (result.indexOf(toReplace) != -1) {
133: result = replace(result, toReplace, replacement);
134: }
135: return result;
136: }
137:
138: /**
139: * Replaces %name% with the corresponding System property.
140: *
141: * @param text pattern string
142: * @return string with replaced system properties
143: */
144: public static String replaceWithSystemProperty(String text) {
145: return replaceWithSystemProperty(text, 0);
146: }
147:
148: public static String replaceWithSystemProperty(String text, int pos) {
149: int start = text.indexOf('%', pos);
150: if (start != -1) {
151: int end = text.indexOf('%', start + 1);
152: if (end != -1) {
153: String propertyName = text.substring(start + 1, end);
154: String value = propertyName.length() > 0 ? System
155: .getProperty(propertyName) : null;
156: if (value != null) {
157: if (end + 1 < text.length()) {
158: text = text.substring(0, start) + value
159: + text.substring(end + 1);
160: text = replaceWithSystemProperty(text, end + 1);
161: } else
162: text = text.substring(0, start) + value;
163: } else {
164: text = replaceWithSystemProperty(text, start + 1);
165: }
166: }
167: }
168: return text;
169: }
170:
171: /**
172: * Converts a String into a Java Identifier. Not allowed chars are
173: * converted into "_<HEXCode of char>".
174: *
175: * @param aString
176: *
177: * @return encoded string
178: */
179: public static final String toJavaIdentifier(String aString) {
180: StringBuffer sb = new StringBuffer(aString.length() + 32);
181: boolean isStartChar = true;
182: for (int i = 0; i < aString.length(); i++) {
183: char c = aString.charAt(i);
184: if (isStartChar) {
185: if (Character.isJavaIdentifierStart(c)) {
186: sb.append(c);
187: isStartChar = false;
188: } else if (c == '.') {
189: sb.append(c);
190: } else {
191: sb.append('_').append(Integer.toHexString(c));
192: isStartChar = false;
193: }
194: } else {
195: if (Character.isJavaIdentifierPart(c)) {
196: sb.append(c);
197: } else if (c == '.') {
198: sb.append(c);
199: isStartChar = true;
200: } else {
201: sb.append('_').append(Integer.toHexString(c));
202: }
203: }
204: }
205: return sb.toString();
206: }
207:
208: /**
209: * Test.
210: */
211: public static void main(String[] args) throws Exception {
212: String original = "Hello, my name is %Greg%";
213: String substituted1 = replace(original, "%Greg%", "Greg");
214: String substituted2 = replace(substituted1, "%Greg%", "Greg");
215:
216: System.out.println(substituted1);
217: System.out.println(substituted2);
218: }
219:
220: /**
221: * Trims a String just like String.trim(), but tolerates null.
222: *
223: * @param toTrim string to trim
224: * @return a trimmed string or null, if the parameter was null
225: */
226: public static final String trim(String toTrim) {
227: if (toTrim == null) {
228: return null;
229: }
230: return toTrim.trim();
231: }
232:
233: }
|