001 /*
002 * Created on Jan 13, 2008
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005 * in compliance with the License. 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 distributed under the License
010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011 * or implied. See the License for the specific language governing permissions and limitations under
012 * the License.
013 *
014 * Copyright @2008-2010 the original author or authors.
015 */
016 package org.fest.swing.util;
017
018 import static org.fest.util.Objects.areEqual;
019 import static org.fest.util.Strings.isEmpty;
020
021 import java.util.regex.Pattern;
022 import java.util.regex.PatternSyntaxException;
023
024 /**
025 * Understands utility methods related to <code>String</code>s.
026 *
027 * @author Alex Ruiz
028 * @author Uli Schrempp
029 */
030 public final class Strings {
031
032 /**
033 * Returns whether the given <code>String</code> is the default <code>toString()</code> implementation of an
034 * <code>Object</code>.
035 * @param s the given <code>String</code>.
036 * @return <code>true</code> if the given <code>String</code> is the default <code>toString()</code> implementation,
037 * <code>false</code> otherwise.
038 */
039 public static boolean isDefaultToString(String s) {
040 if (isEmpty(s)) return false;
041 int at = s.indexOf("@");
042 if (at == -1) return false;
043 String hash = s.substring(at + 1, s.length());
044 try {
045 Integer.parseInt(hash, 16);
046 return true;
047 } catch (NumberFormatException e) {
048 return false;
049 }
050 }
051
052 /**
053 * Indicates if the given <code>String</code>s match. To match, one of the following conditions needs to be true:
054 * <ul>
055 * <li>both <code>String</code>s have to be equal</li>
056 * <li><code>s</code> matches the regular expression in <code>pattern</code></li>
057 * </ul>
058 * @param pattern a <code>String</code> to match (it can be a regular expression.)
059 * @param s the <code>String</code> to verify.
060 * @return <code>true</code> if the given <code>String</code>s match, <code>false</code> otherwise.
061 */
062 public static boolean areEqualOrMatch(String pattern, String s) {
063 if (areEqual(pattern, s)) return true;
064 if (pattern != null && s != null) {
065 try {
066 return s.matches(pattern);
067 } catch (PatternSyntaxException invalidRegex) {
068 return s.contains(pattern);
069 }
070 }
071 return false;
072 }
073
074 /**
075 * Indicates if the given <code>String</code> matches the given regular expression pattern.
076 * @param p the given regular expression pattern.
077 * @param s the <code>String</code> to evaluate.
078 * @return <code>true</code> if the given <code>String</code> matches the given regular expression pattern,
079 * <code>false</code> otherwise. It also returns <code>false</code> if the given <code>String</code> is
080 * <code>null</code>.
081 * @throws NullPointerException if the given regular expression pattern is <code>null</code>.
082 */
083 public static boolean match(Pattern p, String s) {
084 return match(p, (CharSequence)s);
085 }
086
087 /**
088 * Indicates if the given <code>CharSequence</code> matches the given regular expression pattern.
089 * @param p the given regular expression pattern.
090 * @param s the <code>CharSequence</code> to evaluate.
091 * @return <code>true</code> if the given <code>CharSequence</code> matches the given regular expression pattern,
092 * <code>false</code> otherwise. It also returns <code>false</code> if the given <code>CharSequence</code> is
093 * <code>null</code>.
094 * @throws NullPointerException if the given regular expression pattern is <code>null</code>.
095 */
096 public static boolean match(Pattern p, CharSequence s) {
097 if (p == null) throw new NullPointerException("The pattern to match should not be null");
098 if (s == null) return false;
099 return p.matcher(s).matches();
100 }
101
102 private Strings() {}
103 }