package org.andengine.util;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.andengine.util.adt.array.ArrayUtils;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 19:01:08 - 03.04.2010
*/
public final class TextUtils {
// ===========================================================
// Constants
// ===========================================================
public static final Pattern SPLITPATTERN_SPACE = Pattern.compile(" ");
public static final Pattern SPLITPATTERN_SPACES = Pattern.compile(" +");
public static final Pattern SPLITPATTERN_COMMA = Pattern.compile(",");
// ===========================================================
// Fields
// ===========================================================
// ===========================================================
// Constructors
// ===========================================================
private TextUtils() {
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public static final CharSequence pad(final CharSequence pText, final char pPadChar, final int pLength) {
final int padCount = pLength - pText.length();
if (padCount <= 0) {
return pText;
} else {
final StringBuilder sb = new StringBuilder();
sb.append(pText);
for (int i = padCount - 1; i >= 0; i--) {
sb.append(pPadChar);
}
return sb.toString();
}
}
public static final CharSequence padFront(final CharSequence pText, final char pPadChar, final int pLength) {
final int padCount = pLength - pText.length();
if (padCount <= 0) {
return pText;
} else {
final StringBuilder sb = new StringBuilder();
for (int i = padCount - 1; i >= 0; i--) {
sb.append(pPadChar);
}
sb.append(pText);
return sb.toString();
}
}
public static final int countOccurrences(final CharSequence pText, final char pCharacter) {
int count = 0;
int lastOccurrence = android.text.TextUtils.indexOf(pText, pCharacter, 0);
while (lastOccurrence != -1) {
count++;
lastOccurrence = android.text.TextUtils.indexOf(pText, pCharacter, lastOccurrence + 1);
}
return count;
}
/**
* Split a {@link CharSequence} by a Character, i.e. Split lines by using '\n'.<br/>
* Same behavior as <code>String.split("" + pCharacter);</code> .
*/
public static final ArrayList<CharSequence> split(final CharSequence pText, final char pCharacter) {
return TextUtils.split(pText, pCharacter, new ArrayList<CharSequence>());
}
/**
* Split a {@link CharSequence} by a Character, i.e. Split lines by using '\n'.<br/>
* Same behavior as <code>String.split("" + pCharacter);</code> .
*/
public static final <L extends List<CharSequence>> L split(final CharSequence pText, final char pCharacter, final L pResult) {
final int partCount = TextUtils.countOccurrences(pText, pCharacter) + 1;
if (partCount == 0) {
pResult.add(pText);
} else {
int from = 0;
int to;
for (int i = 0; i < (partCount - 1); i++) {
to = android.text.TextUtils.indexOf(pText, pCharacter, from);
pResult.add(pText.subSequence(from, to));
from = to + 1;
}
pResult.add(pText.subSequence(from, pText.length()));
}
return pResult;
}
public static final String formatStackTrace(final StackTraceElement pStackTraceElement) {
return new StringBuilder()
.append(pStackTraceElement.getClassName())
.append('.')
.append(pStackTraceElement.getMethodName())
.append('(')
.append(pStackTraceElement.getFileName())
.append(':')
.append(pStackTraceElement.getLineNumber())
.append(')')
.toString();
}
public static final String formatStackTrace(final StackTraceElement[] pStackTraceElements) {
final StringBuilder sb = new StringBuilder();
final int stackTraceElementCount = pStackTraceElements.length;
for (int i = 0; i < stackTraceElementCount; i++) {
sb.append(pStackTraceElements[i]);
if (i < (stackTraceElementCount - 1)) {
sb.append('\n');
}
}
return sb.toString();
}
public static int countCharacters(final List<CharSequence> pTexts) {
return TextUtils.countCharacters(pTexts, false);
}
public static int countCharacters(final List<CharSequence> pTexts, final boolean pIgnoreWhitespaces) {
int characters = 0;
if (pIgnoreWhitespaces) {
for (int i = pTexts.size() - 1; i >= 0; i--) {
final CharSequence text = pTexts.get(i);
for (int j = text.length() - 1; j >= 0; j--) {
final char character = text.charAt(j);
if (!Character.isWhitespace(character)) {
characters++;
}
}
}
} else {
for (int i = pTexts.size() - 1; i >= 0; i--) {
final CharSequence text = pTexts.get(i);
characters += text.length();
}
}
return characters;
}
/**
* As opposed to {@link ArrayUtils#isEmpty(Object[])}, this method performs a {@link android.text.TextUtils#isEmpty(String)} check on all elements of the array.
*/
public static boolean isEmpty(final CharSequence[] pTexts) {
if (pTexts == null) {
return true;
} else {
for (int i = pTexts.length - 1; i >= 0; i--) {
if (!android.text.TextUtils.isEmpty(pTexts[i])) {
return false;
}
}
return true;
}
}
public static final String join(final char pSeparator, final Object ... pStrings) {
final StringBuilder stringBuilder = new StringBuilder();
final int count = pStrings.length;
for (int i = 0; i < count; i++) {
stringBuilder.append(pStrings[i]);
if (i < count - 1) {
stringBuilder.append(pSeparator);
}
}
return stringBuilder.toString();
}
public static final String join(final String pSeparator, final Object ... pStrings) {
final StringBuilder stringBuilder = new StringBuilder();
final int count = pStrings.length;
for (int i = 0; i < count; i++) {
stringBuilder.append(pStrings[i]);
if (i < count - 1) {
stringBuilder.append(pSeparator);
}
}
return stringBuilder.toString();
}
public static final String ellipsize(final String pText, final String pEllipsis, final int pMaxLength) throws IllegalArgumentException {
final int textLength = pText.length();
if (textLength > pMaxLength) {
final int ellipsisLength = pEllipsis.length();
if (ellipsisLength > pMaxLength) {
throw new IllegalArgumentException("pMaxLength: '" + pMaxLength + "' isn't long enough for pEllipsis: '" + pEllipsis + "'.");
} else {
final StringBuilder result = new StringBuilder();
result.append(pText.substring(0, pMaxLength - ellipsisLength));
result.append(pEllipsis);
return result.toString();
}
} else {
return pText;
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}