com.evotext.clever.util.StringUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of clever-java Show documentation
Show all versions of clever-java Show documentation
The Clever-Java project is a Java wrapper for the Clever.com API for keeping educational applications rostered and up-to-date.
package com.evotext.clever.util;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* Generic string utility class to help deal with common String events.
*
* @author Brendan Clemenzi
*/
public class StringUtil
{
/**
* An empty string that is only constructed once for performance.
*/
public final static String EMPTY_STRING = "";
/**
* table to convert a nibble to a hex character
*/
public static char[] hexChar = {
'0' , '1' , '2' , '3' ,
'4' , '5' , '6' , '7' ,
'8' , '9' , 'A' , 'B' ,
'C' , 'D' , 'E' , 'F' };
/**
* Test if passed string s is null and return an empty
* string if true.
* @param s A string or null
* @return Returns s if it is not null, otherwise returns empty
* string.
*/
public static String emptyIfNull(String s)
{
return s != null ? s : EMPTY_STRING;
}
/**
* Test if passed string s is null and return the default
* string passed in if true.
* @param s A string or null
* @return Returns s if it is not null, otherwise returns empty
* string.
*/
public static String replaceIfNull(String s, String defaultValue)
{
return (!isNullOrEmpty(s)) ? s : defaultValue;
}
/**
* Test if passed string s is an empty string and return null
* if true.
* @param s A string or null
* @return Returns s if it is not empty, otherwise returns null.
*/
public static String nullIfEmpty(String s)
{
if (s != null)
{
// s = s.trim();
if (s.length() == 0)
{
s = null;
}
}
return s;
}
/**
* Test if passed string s is an empty string (after being trimmed
* of leading/trailing whitespace) and return null if true.
* @param s A string or null
* @return Returns s if it is not empty, otherwise returns null.
*/
public static String nullIfEmptyTrim(String s)
{
if (s != null)
{
s = s.trim();
if (s.length() == 0)
{
s = null;
}
}
return s;
}
/**
* Test if passed string s is an empty string or null.
* @param s A string or null
* @return If null or empty, return true, else return false.
*/
public static boolean isNullOrEmpty(String s)
{
if ((s == null) || (s.length() == 0))
return true;
return false;
}
/**
* Test if passed string s is an empty string or null
* (after being trimmed)
* @param s A string or null
* @return If null or empty, return true, else return false.
*/
public static boolean isNullOrEmptyTrim(String s)
{
if (s == null)
return true;
s = s.trim();
if (s.length() == 0)
return true;
return false;
}
/**
*
* @param str
* @param oldsubstr
* @param newsubstr
* @return
*/
public static String replaceSubstr(String str, String oldsubstr, String newsubstr)
{
int substrPos = 0;
int startPos = 0;
StringBuffer strBuf = new StringBuffer();
while ((substrPos = str.indexOf(oldsubstr, startPos)) > -1)
{
strBuf.append(str.substring(startPos, substrPos));
strBuf.append(newsubstr);
startPos = substrPos + oldsubstr.length();
}
strBuf.append(str.substring(startPos));
return strBuf.toString();
}
public static String[] split(String s, String sToken)
{
int iTokenLength=sToken.length();
if (sToken == null || (iTokenLength) == 0){
return new String[] {s};
}
int iCount=0;
int iBegin=0;
int iEnd;
while((iEnd = s.indexOf(sToken, iBegin)) != -1) {
iCount++;
iBegin = iEnd + iTokenLength;
}
iCount++;
// allocate an array to return the tokens,
// we now know how big it should be
String[] result = new String[iCount];
// Scan s again, but this time pick out the tokens
iCount = 0;
iBegin = 0;
while((iEnd = s.indexOf(sToken, iBegin)) != -1) {
result[iCount] = (s.substring(iBegin, iEnd));
iCount++;
iBegin = iEnd + iTokenLength;
}
iEnd = s.length();
result[iCount] = s.substring(iBegin, iEnd);
return (result);
}
/**
* Replaces characters that are not allowed in a Java style
* string literal with their escape characters.
* Quote ("), single quote ('), new line (\n), carriage return (\r),
* and backslash (\), and tab (\t) are replaced.
*
* @param s String to be escaped
* @return String
* @throws NullPointerException if s is null.
*/
public static String replaceJavaLiteral(String s){
int length = s.length();
int newLength = length;
// first check for characters that migh
// be dangerous and calculate a length
// of the string that has escapes.
for (int i=0; itokenString into a String array of sub-strings
* which are separated by characters in the separators string.
* There is no escape sequence in the input string.
* @param tokenString A string containing sub-strings separated by zero
* or more separator characters. Can't be null.
* Example: "A/B,C.D"
* @param separators A string of characters which separate the
* sub-strings in the tokenString. Can be null or empty.
* Example: "/\\|,"
* NOTE: Multiple consecutive separators are treated as a single
* separator which means that you will never have "empty" entries in
* the output array.
* NOTE: If there is only one separator character, this function is
* much faster.
* @return A string array of each of the non-empty sub-strings in the path.
*/
public static String[] parseString(String tokenString, String separators)
{
// Get the character array from the string for fast index lookups.
char[] tokenStringChars = tokenString.toCharArray();
int len = tokenStringChars.length;
// Guess at the initial capacity of the array to be one third of
// the total length of the input string.
ArrayList tokens = new ArrayList((len/3)+1);
// If there are no separators, then just return the input string.
if ((separators == null) || (separators.length() == 0))
{
// Add entire input string as one token unless it is empty.
if (tokenString.length() > 0)
{
tokens.add(tokenString);
}
String[] tokenArray = new String[tokens.size()];
tokens.toArray(tokenArray);
return tokenArray;
}
// Speed optimization if there is only a single separator.
if (separators.length() == 1)
{
int i1=0, i2;
char separatorChar = separators.charAt(0);
// Strip leading separators
while ((i1 < len) && (tokenStringChars[i1] == separatorChar))
i1++;
while (i1 < len)
{
i2 = tokenString.indexOf(separatorChar, i1);
if (i2 < 0)
{
tokens.add(tokenString.substring(i1));
break;
}
tokens.add(tokenString.substring(i1, i2));
i1 = i2 + 1;
// Strip consecutive separators
while ((i1 < len) && (tokenStringChars[i1] == separatorChar))
i1++;
}
}
else // Multiple separators
{
int i1=0, i2;
// Strip leading separators
while ((i1 < len) &&
(separators.indexOf(tokenStringChars[i1]) >= 0))
i1++;
while (i1 < len)
{
i2 = i1;
while ((i2 < len) &&
(separators.indexOf(tokenStringChars[i2]) < 0))
{
i2++;
}
tokens.add(tokenString.substring(i1, i2));
i1 = i2 + 1;
// Strip consecutive separators
while ((i1 < len) &&
(separators.indexOf(tokenStringChars[i1]) >= 0))
i1++;
}
}
String[] tokenArray = new String[tokens.size()];
if (tokens.size() > 0)
tokens.toArray(tokenArray);
return tokenArray;
}
/**
*
* @param dollars
* @return
*/
public static String convertToDollars(double dollars)
{
// Convert the double to a currency value
NumberFormat ncf = NumberFormat.getCurrencyInstance(Locale.US);
String dollarString = ncf.format(dollars);
// Remove commas and dollar symbols
dollarString = replaceSubstr(dollarString, "$", "");
dollarString = replaceSubstr(dollarString, ",", "");
return dollarString;
}
/**
*
* @param b
* @return
*/
public static String toHexString( byte[] b )
{
StringBuffer sb = new StringBuffer( b.length * 2 );
for ( int i=0 ; i>> 4 ] ) ;
// look up low nibble char
sb.append( hexChar [ b[ i] & 0x0f ] ) ;
}
return sb.toString();
}
/**
*
* @param dateField
* @return
*/
public static Date convertToDate(String dateField)
{
Date issueDate = new Date(new java.util.Date().getTime());
if(!isNullOrEmpty(dateField))
{
String[] splitString = StringUtil.split(dateField, "/");
String tempMonth = splitString[0];
String tempDay = splitString[1];
String tempYear = splitString[2];
String dayString = (tempDay.length() == 1) ? "0" + tempDay : tempDay;
String monthString = (tempMonth.length() == 1) ? "0" + tempMonth : tempMonth;
String yearString = (tempYear.length() == 2) ? "20" + tempYear : tempYear;
int day = new Integer(dayString).intValue();
int month = new Integer(monthString).intValue();
int year = new Integer(yearString).intValue();
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
Cal.set(year,(month - 1),day);
// Create java.sql.Date object
issueDate = new Date(Cal.getTime().getTime());
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Date convertToMMDDYYYDate(String dateField)
{
Date issueDate = new Date(new java.util.Date().getTime());
if(!isNullOrEmpty(dateField))
{
int day = new Integer(dateField.substring(3, 5)).intValue();
int month = new Integer(dateField.substring(0, 2)).intValue();
int year = new Integer(dateField.substring(6, 10)).intValue();
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
Cal.set(year,(month - 1),day);
// Create java.sql.Date object
issueDate = new Date(Cal.getTime().getTime());
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Calendar convertToCalendar(String dateField, String timeField)
{
Calendar issueDate = Calendar.getInstance();
if(!isNullOrEmpty(dateField))
{
String[] dateArray = dateField.split("/");
String[] timeArray = timeField.split(":");
int day = Integer.parseInt(dateArray[1]);
int month = Integer.parseInt(dateArray[0]);
int year = Integer.parseInt(dateArray[2]);
int hour = Integer.parseInt(timeArray[0]);
int minute = Integer.parseInt(timeArray[1]);
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
issueDate.set(year,(month - 1),day);
issueDate.set(Cal.HOUR_OF_DAY, hour);
issueDate.set(Cal.MINUTE, minute);
issueDate.set(Cal.SECOND, 0);
issueDate.set(Cal.MILLISECOND, 0);
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Date convertToDateMorning(String dateField)
{
Date issueDate = new Date(new java.util.Date().getTime());
if(!isNullOrEmpty(dateField))
{
String[] dateArray = dateField.split("/");
int day = Integer.parseInt(dateArray[1]);
int month = Integer.parseInt(dateArray[0]);
int year = Integer.parseInt(dateArray[2]);
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
Cal.set(year,(month - 1),day);
Cal.set(Cal.HOUR_OF_DAY, 0);
Cal.set(Cal.MINUTE, 0);
Cal.set(Cal.SECOND, 0);
Cal.set(Cal.MILLISECOND, 0);
// Create java.sql.Date object
issueDate = new Date(Cal.getTime().getTime());
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Calendar convertToCalendarDateMorning(String dateField)
{
Calendar issueDate = Calendar.getInstance();
if(!isNullOrEmpty(dateField))
{
String[] dateArray = dateField.split("/");
int day = Integer.parseInt(dateArray[1]);
int month = Integer.parseInt(dateArray[0]);
int year = Integer.parseInt(dateArray[2]);
// Setup Calendar Object
issueDate.set(year,(month - 1),day);
issueDate.set(Calendar.HOUR_OF_DAY, 0);
issueDate.set(Calendar.MINUTE, 0);
issueDate.set(Calendar.SECOND, 0);
issueDate.set(Calendar.MILLISECOND, 0);
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Date convertToDateMorning(Date dateField)
{
Date tempDate = new Date(new java.util.Date().getTime());
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
Cal.setTime(dateField);
Cal.set(Calendar.HOUR_OF_DAY, 0);
Cal.set(Calendar.MINUTE, 0);
Cal.set(Calendar.SECOND, 0);
Cal.set(Calendar.MILLISECOND, 0);
// Create java.sql.Date object
tempDate = new Date(Cal.getTimeInMillis());
return tempDate;
}
/**
*
* @param dateField
* @return
*/
public static Date convertToDateMidnight(String dateField)
{
Date issueDate = new Date(new java.util.Date().getTime());
if(!isNullOrEmpty(dateField))
{
String[] dateArray = dateField.split("/");
int day = Integer.parseInt(dateArray[1]);
int month = Integer.parseInt(dateArray[0]);
int year = Integer.parseInt(dateArray[2]);
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
Cal.set(year,(month - 1),day);
Cal.set(Cal.HOUR_OF_DAY, 23);
Cal.set(Cal.MINUTE, 59);
Cal.set(Cal.SECOND, 59);
Cal.set(Cal.MILLISECOND, 0);
// Create java.sql.Date object
issueDate = new Date(Cal.getTime().getTime());
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Calendar convertToCalendarDateMidnight(String dateField)
{
Calendar issueDate = Calendar.getInstance();
if(!isNullOrEmpty(dateField))
{
String[] dateArray = dateField.split("/");
int day = Integer.parseInt(dateArray[1]);
int month = Integer.parseInt(dateArray[0]);
int year = Integer.parseInt(dateArray[2]);
// Setup Calendar Object
issueDate.set(year,(month - 1),day);
issueDate.set(Calendar.HOUR_OF_DAY, 23);
issueDate.set(Calendar.MINUTE, 59);
issueDate.set(Calendar.SECOND, 59);
issueDate.set(Calendar.MILLISECOND, 0);
}
return issueDate;
}
/**
*
* @param dateField
* @return
*/
public static Date convertToDateMidnight(Date dateField)
{
Date tempDate = new Date(new java.util.Date().getTime());
// Setup Calendar Object
Calendar Cal = Calendar.getInstance();
Cal.setTime(dateField);
Cal.set(Calendar.HOUR_OF_DAY, 23);
Cal.set(Calendar.MINUTE, 59);
Cal.set(Calendar.SECOND, 59);
Cal.set(Calendar.MILLISECOND, 0);
// Create java.sql.Date object
tempDate = new Date(Cal.getTimeInMillis());
return tempDate;
}
/**
*
* @param inputString
* @return
*/
public static String stringPreview(String inputString)
{
String tmpString = "";
if(inputString.length() >= 20)
{
tmpString = inputString.substring(0, 19);
}
else
{
tmpString = inputString.substring(0, inputString.length());
}
return tmpString;
}
/**
* Check for a string, if an exception is thrown return default value.
*
* @param s
* @param defaultValue
* @return
*/
public static String replaceIfNullOrError(String s, String defaultValue)
{
String tmpString = EMPTY_STRING;
try
{
tmpString = replaceIfNull(s, defaultValue);
}
catch(Exception e)
{
tmpString = defaultValue;
}
return tmpString;
}
/**
* Strip out HTML tags. Leave plain/text content. HREFs in links will be removed
*
* @param html
* @return
*/
public static String stripHTML (String html)
{
if (html == null || html.isEmpty())
{
return "";
}
if (html.toLowerCase().contains(""))
{
int beginIndex = html.toLowerCase().indexOf("");
endIndex += "".length();
html = html.substring(beginIndex, endIndex);
}
for (String tag : new String[]{"style", "script"})
{
int tries = 10;
while (tries-- > 0 && html.toLowerCase().contains("<" + tag))
{
html = removeHTMLBlock(html, tag);
}
}
html = html.replaceAll("•", "");
html = html.replaceAll("•", "");
// OK. I should have "simple" markup left.
// Since I do not care about HREFs or IMG sources here,
// I can be draconian in my clensing
html = html.replaceAll("?\\w+[^><]*>", " ");
return html;
}
public static String removeHTMLBlock(String html, String tag)
{
if (html.toLowerCase().contains("<" + tag) && html.toLowerCase().contains("" + tag))
{
int beginIndex = html.toLowerCase().indexOf("<" + tag);
int endIndex = html.toLowerCase().indexOf("" + tag);
endIndex += ("" + tag + ">").length();
html = html.substring(0, beginIndex) + html.substring(endIndex);
}
return html;
}
public static String truncate(String fullString, int maxLength)
{
String tempString = fullString.substring(0, Math.min(fullString.length(), maxLength));
return tempString;
}
/**
* Removes know entity encoding that is not XHTML ready
* @param s
* @return
*/
public static String cleanForXHTMLEntityEncoding(String s)
{
s = replaceSubstr(s, " ", " ");
return s;
}
/**
* Remove any non alpha numeric characters from a string
* @param s Any string
* @return The string with any alpha numeric values removed, if the string passed in was null, return an empty string
*/
public static String removeSpecialChar(String s)
{
return s != null ? s.replaceAll("[^A-Za-z0-9_ ]", "") : EMPTY_STRING;
}
/**
* Removes references to custom tags ex. ... from the
* specified string.
* @param dirtyString
* @return A string cleaned of references to custom tags.
*/
public static String removeCustomTags(String dirtyString)
{
return dirtyString.replaceAll("<\\w+:\\w+>|\\w+:\\w+>", "");
}
}