Character utilities.
//package edu.northwestern.at.utils;
/* Please see the license information at the end of this file. */
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Character utilities.
*
* <p>
* This class provides various static utility methods for manipulating
* characters.
* </p>
*/
public class CharUtils {
/** Set of punctuation values. */
protected static Set<Integer> punctuationSet = SetFactory.createNewSet();
/** Set of symbol values. */
protected static Set<Integer> symbolSet = SetFactory.createNewSet();
/** Left single curly quote. */
public static final char LSQUOTE = '\u2018';
public static final String LSQUOTE_STRING = "\u2018";
/** Right single curly quote. */
public static final char RSQUOTE = '\u2019';
public static final String RSQUOTE_STRING = "\u2019";
/** Left double curly quote. */
public static final char LDQUOTE = '\u201C';
public static final String LDQUOTE_STRING = "\u201C";
/** Right double curly quote. */
public static final char RDQUOTE = '\u201D';
public static final String RDQUOTE_STRING = "\u201D";
/** Unicode filled-in circle/dot. */
public static final char SOLIDCIRCLE = '\u2022';
public static final String SOLIDCIRCLE_STRING = "\u2022";
/** Unicode black circle/dot. */
public static final char BLACKCIRCLE = '\u25CF';
public static final String BLACKCIRCLE_STRING = "\u25CF";
/** Degrees/Hours. */
public static final char DEGREES_MARK = '\u2032';
public static final char MINUTES_MARK = '\u2033';
public static final char SECONDS_MARK = '\u2034';
/** Gap marker inside words. */
public static final char CHAR_GAP_MARKER = BLACKCIRCLE;
/** Gap marker inside words as string. */
public static final String CHAR_GAP_MARKER_STRING = CHAR_GAP_MARKER + "";
/** End of text section marker character. */
public static final char CHAR_END_OF_TEXT_SECTION = '\ue500';
public static final String CHAR_END_OF_TEXT_SECTION_STRING = "\ue500";
/** Substitute soft hyphen marker. */
public static final char CHAR_FAKE_SOFT_HYPHEN = '\ue501';
public static final String CHAR_FAKE_SOFT_HYPHEN_STRING = "\ue501";
/** Substitute single quote character. */
public static final char CHAR_SUBSTITUTE_SINGLE_QUOTE = '\ue502';
public static final String CHAR_SUBSTITUTE_SINGLE_QUOTE_STRING = "\ue502";
/** <sup> text marker. */
public static final char CHAR_SUP_TEXT_MARKER = '\ue503';
public static final String CHAR_SUP_TEXT_MARKER_STRING = "\ue503";
/** Long dash. */
public static final char LONG_DASH = '\u2014';
/** Long dash string. */
public static final String LONG_DASH_STRING = LONG_DASH + "";
/** Long dash. */
public static final char SHORT_DASH = '\u2010';
/** Short dash string. */
public static final String SHORT_DASH_STRING = SHORT_DASH + "";
/** Old Euro symbol. */
public static final char OLD_EURO_SIGN = '\u20A0';
/** New Euro symbol. */
public static final char EURO_SIGN = '\u20AC';
/** Unknown punctuation marker. */
public static final char UNKNOWN_PUNC = '\u25AA';
/** Combining macron character. */
public static final char COMBINING_MACRON = '\u0304';
/** Combining macron string. */
public static final String COMBINING_MACRON_STRING = "\u0304";
/** Nonbreaking blank character. */
public static final char NONBREAKING_BLANK = '\u00A0';
/** Nonbreaking blank string. */
public static final String NONBREAKING_BLANK_STRING = "\u00A0";
/** Nonbreaking hyphen character. */
public static final char NONBREAKING_HYPHEN = '\u2011';
/** Nonbreaking hyphen string. */
public static final String NONBREAKING_HYPHEN_STRING = "\u2011";
/** Vertical bar. */
public static final char VERTICAL_BAR = '\u007C';
/** Vertical bar string. */
public static final String VERTICAL_BAR_STRING = "\u007C";
/** Broken vertical bar. */
public static final char BROKEN_VERTICAL_BAR = '\u00A6';
/** Broken vertical bar string. */
public static final String BROKEN_VERTICAL_BAR_STRING = "\u00A6";
/** Light vertical bar. */
public static final char LIGHT_VERTICAL_BAR = '\u2758';
/** Light vertical bar string. */
public static final String LIGHT_VERTICAL_BAR_STRING = "\u2758";
/** Digits pattern. */
public static String digitsPattern = "[0-9]*";
/** Ordinal number pattern (English only!) */
public static String ordinalNumberPattern = "[0-9][0-9,]*(th|TH|st|ST|nd|ND|rd|RD)";
/** Pattern for 1 or more hyphens. */
protected final static Pattern hyphenPattern = Pattern
.compile("^([-\u2011]{1,})$");
protected final static Matcher hyphenMatcher = hyphenPattern.matcher("");
/** Pattern for 1 or more asterisks. */
protected final static Pattern asteriskPattern = Pattern
.compile("^(\\*{1,})$");
protected final static Matcher asteriskMatcher = asteriskPattern
.matcher("");
/** Pattern for 1 or more asterisks followed by 's. */
protected final static Pattern possessiveAsteriskPattern = Pattern
.compile("^(\\*{1,})'(s|S)$");
protected final static Matcher possessiveAsteriskMatcher = possessiveAsteriskPattern
.matcher("");
/** Pattern for 2 or more dashes followed by 's. */
protected final static Pattern possessiveDashesPattern = Pattern
.compile("^([-\u2011]{2,})'(s|S)$");
protected final static Matcher possessiveDashesMatcher = possessiveDashesPattern
.matcher("");
/** Pattern for Unicode word. */
protected final static Pattern wordPattern = Pattern
.compile("([\\w]+|([\\w]+-[\\w]+)+|[\\w]*'[\\w]*)");
protected final static Matcher wordMatcher = wordPattern.matcher("");
/**
* Check if character is a letter.
*
* @param c
* Character to test.
*
* @return true if character is a letter.
*/
public static boolean isLetter(char c) {
return Character.isLetter(c);
}
/**
* Check if string is a single letter.
*
* @param s
* String to test.
*
* @return true if string is a single letter.
*/
public static boolean isLetter(String s) {
return (s != null) && (s.length() == 1)
&& Character.isLetter(s.charAt(0));
}
/**
* Check if string contains only letters.
*
* @param s
* String to test.
*
* @return true if string contains only letters.
*/
public static boolean isLetters(String s) {
boolean result = false;
if (s != null) {
result = true;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (!isLetter(ts.charAt(i))) {
result = false;
break;
}
}
}
return result;
}
/**
* Check if a string is a word (Unicode letters, digits, hyphen).
*
* @param s
* String to test.
*
* @return true if string is a Unicode word.
*/
public static boolean isAWord(String s) {
boolean result = false;
if ((s != null) && !s.equals("'")) {
wordMatcher.reset(s);
result = wordMatcher.matches();
}
return result;
}
/**
* Check if character is a capital letter.
*
* @param c
* Character to test.
*
* @return true if character is a capital letter.
*/
public static boolean isCapitalLetter(char c) {
return Character.isLetter(c) && Character.isUpperCase(c);
}
/**
* True if character is punctuation.
*/
public static boolean isPunctuation(char ch) {
return punctuationSet.contains(new Integer(Character.getType(ch)))
|| (ch == '`') || (ch == UNKNOWN_PUNC);
}
/**
* True if all characters in a string are punctuation.
*
* @param s
* String to check for punctuation.
*
* @return true if all characters are punctuation, including dashes.
*/
public static boolean isPunctuation(String s) {
boolean result = true;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (!isPunctuation(ts.charAt(i))) {
result = false;
break;
}
}
return result;
}
/**
* True if character is symbol.
*/
public static boolean isSymbol(char ch) {
return symbolSet.contains(new Integer(Character.getType(ch)));
}
/**
* True if all characters in a string are symbols.
*
* @param s
* String to check for symbols.
*
* @return true if all characters are symbols.
*/
public static boolean isSymbol(String s) {
boolean result = true;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (!isSymbol(ts.charAt(i))) {
result = false;
break;
}
}
return result;
}
/**
* True if character is punctuation or symbol.
*
* @param c
* Character to check for punctuation or symbol.
*
* @return true if character is punctuation or symbol.
*/
public static boolean isPunctuationOrSymbol(char c) {
return isPunctuation(c) || isSymbol(c);
}
/**
* True if all characters in a string are punctuation or symbols.
*
* @param s
* String to check for punctuation and symbols.
*
* @return true if all characters are punctuation or symbols.
*/
public static boolean isPunctuationOrSymbol(String s) {
boolean result = true;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (!isPunctuationOrSymbol(ts.charAt(i))) {
result = false;
break;
}
}
return result;
}
/**
* True if character is a digit.
*
* @param c
* Character to check for being a digit.
*
* @return true if character is a digit from 0 through 9.
*/
public static boolean isDigit(char c) {
return Character.isDigit(c);
}
/**
* True if all characters in a string are digits.
*
* @param s
* String to check for digits.
*
* @return true if all characters are digits 0 through 9.
*/
public static boolean isDigits(String s) {
if (s == null)
return false;
boolean result = true;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (!isDigit(s.charAt(i))) {
result = false;
break;
}
}
return result;
}
/**
* True if at least one character in a string is a digit.
*
* @param s
* String to check for digits.
*
* @return true if at least one character is a digit 0 through 9.
*/
public static boolean hasDigit(String s) {
if (s == null)
return false;
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (isDigit(s.charAt(i))) {
result = true;
break;
}
}
return result;
}
/**
* True if character is a dash of some kind.
*
* @param c
* Character to check for being a dash.
*
* @return true if character is a dash.
*/
public static boolean isDash(char c) {
return Character.getType(c) == Character.DASH_PUNCTUATION;
}
/**
* True if character is a breaking dash of some kind.
*
* @param c
* Character to check for being a breaking dash.
*
* @return true if character is a breaking dash.
*/
public static boolean isBreakingDash(char c) {
return isDash(c) && (c != NONBREAKING_HYPHEN);
}
/**
* True if string contains a dash of some kind.
*
* @param s
* String to check for containing a dash.
*
* @return true if string contains a dash.
*/
public static boolean hasDash(String s) {
boolean result = false;
for (int i = 0; i < s.length(); i++) {
result = (Character.getType(s.charAt(i)) == Character.DASH_PUNCTUATION);
if (result)
break;
}
return result;
}
/**
* Evict dashes from a string.
*
* @param s
* String from which to evict dashes.
*
* @return String with dashes evicted.
*/
public static String evictDashes(String s) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
if (Character.getType(s.charAt(i)) != Character.DASH_PUNCTUATION) {
result.append(s.charAt(i));
}
}
return result.toString();
}
/**
* True if a string is a number.
*
* @param s
* String to check for being a number.
*
* @return true if string is a number.
*/
public static boolean isNumber(String s) {
boolean result = false;
if (s != null) {
try {
double x = Double.parseDouble(s);
result = true;
} catch (Exception e) {
}
}
return result;
}
/**
* True if a string is an ordinal number.
*
* @param s
* String to check for being an ordinal number.
*
* @return true if string is an ordinal number.
*/
public static boolean isOrdinal(String s) {
boolean result = false;
if (s != null) {
result = s.matches(ordinalNumberPattern);
}
return result;
}
/**
* True if all letters in a string are uppercase.
*
* @param s
* String to check for upper case letters.
*
* @return true if all letters are upper case.
*
* <p>
* Note: non-letters are ignored. The result is false if there are
* no letters in the string.
* </p>
*/
public static boolean allLettersCapital(String s) {
boolean result = false;
String ts = s.trim();
int l = ts.length();
for (int i = 0; i < l; i++) {
char ch = ts.charAt(i);
if (Character.isLetter(ch)) {
if (!Character.isUpperCase(ch)) {
result = false;
break;
} else {
result = true;
}
}
}
return result;
}
/**
* True if all characters in a string are uppercase.
*
* @param s
* String to check for upper case letters.
*
* @return true if all characters are upper case.
*
* <p>
* All characters are checked, letters and non-letters alike.
* </p>
*/
public static boolean isUpperCase(String s) {
boolean result = true;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (!Character.isUpperCase(ts.charAt(i))) {
result = false;
break;
}
}
return result;
}
/**
* True if first letter in a string is uppercase.
*
* @param s
* String to check for initial uppercase letter.
*
* @return true if first letter in string is uppercase.
*
* <p>
* Leading non-letters are ignored. If none of the characters in the
* string is a letters, false is returned.
* </p>
*/
public static boolean isFirstLetterCapital(String s) {
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
if (Character.isLetter(ts.charAt(i))) {
result = Character.isUpperCase(ts.charAt(i));
break;
}
}
return result;
}
/**
* True if any characters in a string are punctuation.
*
* @param s
* String to check for punctuation.
*
* @return true if any characters are punctuation, except that dashes are
* allowed.
*/
public static boolean hasPunctuation(String s) {
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
char ch = ts.charAt(i);
if (isPunctuation(ch) && (ch != '-')) {
result = true;
break;
}
}
return result;
}
/**
* True if any characters in a string are punctuation.
*
* @param s
* String to check for punctuation.
*
* @return true if any characters are punctuation, except that dashes and
* apostrophes are allowed.
*/
public static boolean hasPunctuationNotApostrophes(String s) {
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
char ch = ts.charAt(i);
if (isPunctuation(ch) && (ch != '-') && (ch != '\'')) {
result = true;
break;
}
}
return result;
}
/**
* True if any characters in a string are symbols.
*
* @param s
* String to check for symbols.
*
* @return true if any characters are symbols.
*/
public static boolean hasSymbols(String s) {
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
char ch = ts.charAt(i);
if (isSymbol(ch)) {
result = true;
break;
}
}
return result;
}
/**
* True if character is a gap marker.
*
* @param c
* Character to check for being a gap marker.
*
* @return true if character is a gap marker.
*/
public static boolean isGapMarker(char c) {
return (c == CHAR_GAP_MARKER);
}
/**
* True if any characters in a string are gap markers.
*
* @param s
* String to check for gap markers.
*
* @return true if any characters are gap markers.
*/
public static boolean hasGapMarkers(String s) {
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
char ch = ts.charAt(i);
if (isGapMarker(ch)) {
result = true;
break;
}
}
return result;
}
/**
* True if character is a Greek letter.
*
* @param c
* Character to check for being a Greek letter.
*
* @return true if character is a Greek letter.
*/
public static boolean isGreekLetter(char c) {
return (((c >= 0x0370) && (c < 0x0400)) || ((c >= 0x1f00) && (c < 0x2000)));
}
/**
* True if any characters in a string are Greek letters.
*
* @param s
* String to check for Greek letters.
*
* @return true if any characters are Greek letters.
*/
public static boolean hasGreekLetters(String s) {
boolean result = false;
String ts = s.trim();
for (int i = 0; i < ts.length(); i++) {
char ch = ts.charAt(i);
if (isGreekLetter(ch)) {
result = true;
break;
}
}
return result;
}
/**
* Is character an English vowel?
*
* @param c
* Character to check.
*
* @return true if "c" is a, e, i, o, u.
*/
public static boolean isEnglishVowel(char c) {
return (c == 'a') || (c == 'e') || (c == 'i') || (c == 'o')
|| (c == 'u');
}
/**
* True if character is single quote.
*
* @param c
* Character to check for being a single quote.
*
* @return true if character is a single quote.
*/
public static boolean isSingleQuote(char c) {
return (c == '\'') || (c == LSQUOTE) || (c == RSQUOTE);
}
/**
* True if character is an apostrophe.
*
* @param c
* Character to check for being an apostrophe.
*
* @return true if character is an apostrophe.
*/
public static boolean isApostrophe(char c) {
return (c == '\'');
}
/**
* True if character is a single opening quote.
*
* @param c
* Character to check for being a single opening quote.
*
* @return true if character is a single opening quote.
*/
public static boolean isSingleOpeningQuote(char c) {
return (c == '\'') || (c == LSQUOTE);
}
/**
* True if string ends with "single quote + s".
*
* @param s
* String to check for ending with single quote + s.
*
* @return true if token ends with single quote + s.
*/
public static boolean endsWithSingleQuoteS(String s) {
int l = s.length();
return (l > 1)
&& ((s.charAt(l - 1) == 's') || (s.charAt(l - 1) == 'S'))
&& isSingleQuote(s.charAt(l - 2));
}
/**
* True if string is "single quote + s".
*
* @param s
* String to check for being single quote + s.
*
* @return true if token is single quote + s.
*/
public static boolean isSingleQuoteS(String s) {
int l = s.length();
return (l == 2) && isSingleQuote(s.charAt(0))
&& ((s.charAt(1) == 's') || (s.charAt(1) == 'S'));
}
/**
* True if string ends with single quote.
*
* @param s
* String to check for ending with single quote.
*
* @return true if token ends with single quote.
*/
public static boolean endsWithSingleQuote(String s) {
int l = s.length();
return (l > 0) && isSingleQuote(s.charAt(l - 1));
}
/**
* True if character is any kind of opening quote.
*
* @param c
* Character to check for being an opening quote.
*
* @return true if character is an opening quote.
*/
public static boolean isOpeningQuote(char c) {
return (c == '\'') || (c == LSQUOTE) || (c == LDQUOTE);
}
/**
* True if character is any kind of closing quote.
*
* @param c
* Character to check for being a closing quote.
*
* @return true if character is a closing quote.
*/
public static boolean isClosingQuote(char c) {
return (c == '\'') || (c == '\"') || (c == RSQUOTE) || (c == RDQUOTE);
}
/**
* True if string contains a single quote.
*
* @param s
* String to check for containing a single quote.
*
* @return true if string contains a single quote.
*/
public static boolean hasSingleQuote(String s) {
boolean result = false;
for (int i = 0; i < s.length(); i++) {
result = result || isSingleQuote(s.charAt(i));
if (result)
break;
}
return result;
}
/**
* True if string is all caps.
*
* @param s
* String to check for being all capitals.
*
* @return True if string is all capitals.
*/
public static boolean isAllCaps(String s) {
boolean result = true;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLetter(ch)) {
result = result && Character.isUpperCase(ch);
if (!result)
break;
}
}
return result;
}
/**
* True if string is all lower case.
*
* @param s
* String to check for being all lower case.
*
* @return True if string is all lower case.
*/
public static boolean isAllLowerCase(String s) {
boolean result = true;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLetter(ch)) {
result = result && Character.isLowerCase(ch);
if (!result)
break;
}
}
return result;
}
/**
* True if string contains at least one capital letter.
*
* @param s
* String to check for having a capital letter.
*
* @return True if string has a capital letter.
*/
public static boolean hasCapitalLetter(String s) {
boolean result = false;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
result = result || Character.isLetter(ch)
&& Character.isUpperCase(ch);
if (result)
break;
}
return result;
}
/**
* True if string contains at least one apostrophe.
*
* @param s
* String to check for having an apostrophe.
*
* @return True if string has an apostrophe.
*/
public static boolean hasApostrophe(String s) {
return (s.indexOf("'") >= 0);
}
/**
* True if string contains internal capital letters.
*
* @param s
* String to check for having internal capitals.
*
* @return True if string has internal capitals.
*/
public static boolean hasInternalCaps(String s) {
boolean result = false;
for (int i = 1; i < s.length(); i++) {
char ch = s.charAt(i);
result = result || Character.isLetter(ch)
&& Character.isUpperCase(ch);
if (result)
break;
}
return result;
}
/**
* True if string is all periods.
*
* @param s
* String to check for being all periods.
*
* @return True if string is all periods.
*/
public static boolean isAllPeriods(String s) {
return s.matches("^(\\.{1,})$");
}
/**
* True if string is all hyphens.
*
* @param s
* String to check for being all hyphens.
*
* @return True if string is all hyphens.
*/
public synchronized static boolean isAllHyphens(String s) {
hyphenMatcher.reset(s);
return hyphenMatcher.matches();
}
/**
* True if string is all asterisks.
*
* @param s
* String to check for being all asterisks.
*
* @return True if string is all asterisks.
*/
public synchronized static boolean isAllAsterisks(String s) {
asteriskMatcher.reset(s);
return asteriskMatcher.matches();
}
/**
* True if string is asterisks followed by 's.
*
* @param s
* String to check for being asterisks followed by 's.
*
* @return True if string is asterisks followed by 's.
*/
public synchronized static boolean isPossessiveAsterisks(String s) {
possessiveAsteriskMatcher.reset(s);
return possessiveAsteriskMatcher.matches();
}
/**
* True if string is two or more dashes followed by 's.
*
* @param s
* String to check for being dashes followed by 's.
*
* @return True if string is dashes followed by 's.
*/
public synchronized static boolean isPossessiveDashes(String s) {
possessiveDashesMatcher.reset(s);
return possessiveDashesMatcher.matches();
}
/**
* True if character is whitespace.
*
* @param c
* Character to check for being whitespace.
*
* @return True if character c is whitespace.
*/
public static boolean isWhitespace(char c) {
return Character.isWhitespace(c);
}
/**
* Make case of string match another string's case.
*
* @param s
* String whose case should be changed.
* @param sCaseToMatch
* String whose case should be matched.
*
* @return "s" modified to match case of "sCaseToMatch".
*
*/
public static String makeCaseMatch(String s, String sCaseToMatch) {
String result = s;
if (isAllCaps(sCaseToMatch)) {
result = result.toUpperCase();
} else {
boolean isCapitalized = false;
if (sCaseToMatch.length() > 0) {
if (CharUtils.isSingleQuote(sCaseToMatch.charAt(0))) {
isCapitalized = (sCaseToMatch.length() > 1)
&& CharUtils
.isCapitalLetter(sCaseToMatch.charAt(1));
} else {
isCapitalized = CharUtils.isCapitalLetter(sCaseToMatch
.charAt(0));
}
}
if (result.length() > 0) {
if (CharUtils.isSingleQuote(result.charAt(0))) {
String char0 = result.charAt(0) + "";
String rest = "";
if (result.length() > 1) {
char char1 = result.charAt(1);
if (result.length() > 2) {
rest = result.substring(2);
}
if (isCapitalized) {
result = char0 + Character.toUpperCase(char1)
+ rest;
} else {
result = char0 + Character.toLowerCase(char1)
+ rest;
}
}
} else {
String rest = "";
char char0 = result.charAt(0);
if (result.length() > 1) {
rest = result.substring(1);
}
if (isCapitalized) {
result = Character.toUpperCase(char0) + rest;
} else {
result = Character.toLowerCase(char0) + rest;
}
}
}
}
return result;
}
/**
* Capitalize first letter in string.
*
* @param s
* String to capitalize.
*
* @return "s" with first letter (not first character) capitalized.
* Remaining characters are set to lower case.
*/
public static String capitalizeFirstLetter(String s) {
char[] chars = s.toLowerCase().toCharArray();
for (int i = 0; i < chars.length; i++) {
char ch = chars[i];
if (Character.isLetter(ch)) {
chars[i] = Character.toUpperCase(ch);
break;
}
}
return new String(chars);
}
/**
* Check for US currency.
*
* @param token
* Word to check for currency.
*
* @return true if token is US currency.
*/
public static boolean isUSCurrency(String token) {
return token
.matches("^\\s*[$]?\\s*((\\d+)|(\\d{1,3}(\\,\\d{3})+))(\\.\\d{2})?\\s*$"
// "(?n:(^\\$?(?!0,?\\d)\\d{1,3}(?=(?<1>,)|(?<1>))(\\k<1>\\d{3})*(\\.\\d\\d)?)$)"
);
}
/**
* Check for US currency.
*
* @param token
* Word to check for currency.
*
* @return true if token is US currency.
*/
public static boolean isUSCurrencyCents(String token) {
return token.matches("([\\+\\-]*)([0-9\\,]+)$");
}
/**
* Check for currency.
*
* @param token
* Word to check for currency.
*
* @return true if token is currency.
*/
public static boolean isCurrency(String token) {
return token.matches("^-?[\\$L" + CharUtils.EURO_SIGN
+ " ]*[0-9\\.\\,]+[lL]*$");
}
/**
* Get case value for a string.
*
* @param s
* The string.
*
* @return Case value. "0" = all lower case "1" = first letter is upper case
* "2" = first character not upper case, but some characters after
* first are upper case. "3" = all characters are upper case
*/
public static String getCaseOld(String s) {
String result = "0";
if (CharUtils.allLettersCapital(s)) {
result = "3";
} else if (CharUtils.isFirstLetterCapital(s)) {
result = "1";
} else if (CharUtils.hasInternalCaps(s)) {
result = "2";
}
return result;
}
/**
* Get case value for a string.
*
* @param s
* The string.
*
* @return Case value. 0 = all letters are lower case 1 = first letter
* (only) is upper case 2 = first letter is not upper case, but some
* letters after first are upper case 3 = all letters are upper case
*/
public static int getLetterCase(String s) {
int result = 0;
int capLetCount = 0;
int letCount = 0;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLetter(ch)) {
letCount++;
if (Character.isUpperCase(ch)) {
if (letCount == 1)
result = 1;
capLetCount++;
}
}
}
if (letCount == capLetCount) {
result = 3;
} else if ((result == 0) && (capLetCount > 0)) {
result = 2;
}
return result;
}
/** Don't allow instantiation, do allow overrides. */
protected CharUtils() {
}
/** Static initializer. */
static {
punctuationSet.add(new Integer(Character.CONNECTOR_PUNCTUATION));
punctuationSet.add(new Integer(Character.DASH_PUNCTUATION));
punctuationSet.add(new Integer(Character.ENCLOSING_MARK));
punctuationSet.add(new Integer(Character.END_PUNCTUATION));
punctuationSet.add(new Integer(Character.FINAL_QUOTE_PUNCTUATION));
punctuationSet.add(new Integer(Character.INITIAL_QUOTE_PUNCTUATION));
punctuationSet.add(new Integer(Character.OTHER_PUNCTUATION));
punctuationSet.add(new Integer(Character.PARAGRAPH_SEPARATOR));
punctuationSet.add(new Integer(Character.START_PUNCTUATION));
symbolSet.add(new Integer(Character.CURRENCY_SYMBOL));
symbolSet.add(new Integer(Character.MATH_SYMBOL));
symbolSet.add(new Integer(Character.MODIFIER_SYMBOL));
symbolSet.add(new Integer(Character.OTHER_SYMBOL));
symbolSet.add(new Integer(Character.PRIVATE_USE));
}
}
/*
* Copyright (c) 2008, 2009 by Northwestern University. All rights reserved.
*
* Developed by: Academic and Research Technologies Northwestern University
* http://www.it.northwestern.edu/about/departments/at/
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* with the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimers.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimers in the documentation
* and/or other materials provided with the distribution.
*
* Neither the names of Academic and Research Technologies, Northwestern
* University, nor the names of its contributors may be used to endorse or
* promote products derived from this Software without specific prior written
* permission.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH
* THE SOFTWARE.
*/
class SetFactory {
/**
* Create a new HashSet.
*/
public static <E> Set<E> createNewSet() {
return new HashSet<E>();
}
/**
* Create a new HashSet.
*
* @param capacity
* Initial capacity.
*/
public static <E> Set<E> createNewSet(int capacity) {
return new HashSet<E>(capacity);
}
/**
* Create a new TreeSet.
*/
public static <E> Set<E> createNewSortedSet() {
return new TreeSet<E>();
}
/** Don't allow instantiation, do allow overrides. */
protected SetFactory() {
}
}
/*
* Copyright (c) 2008, 2009 by Northwestern University. All rights reserved.
*
* Developed by: Academic and Research Technologies Northwestern University
* http://www.it.northwestern.edu/about/departments/at/
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* with the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimers.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimers in the documentation
* and/or other materials provided with the distribution.
*
* Neither the names of Academic and Research Technologies, Northwestern
* University, nor the names of its contributors may be used to endorse or
* promote products derived from this Software without specific prior written
* permission.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH
* THE SOFTWARE.
*/
Related examples in the same category