package org.andengine.util;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* (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
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
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;
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}