All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.paganini2008.devtools.StringUtils Maven / Gradle / Ivy

There is a newer version: 2.0.5
Show newest version
package com.github.paganini2008.devtools;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;

import com.github.paganini2008.devtools.collection.LruMap;
import com.github.paganini2008.devtools.primitives.Chars;

/**
 * StringUtils
 * 
 * @author Fred Feng
 * @version 1.0
 */
public abstract class StringUtils {

	public static final String lineSeparator = System.getProperty("line.separator");

	public static final String BLANK = " ";

	public static final String EMPTY = "";

	public static final String UNDEFINED = "undefined";

	public static final String BLANK_CHARACTER = " \t\n\r\f";

	public static final String[] EMPTY_ARRAY = new String[0];

	public static final int INDEX_NOT_FOUND = -1;

	public static String toLetter(int value) {
		StringBuilder str = new StringBuilder();
		while (value >= 0) {
			str.append((char) (value % 26 + 97));
			value = value / 26 - 1;
		}
		return str.reverse().toString();
	}

	public static String reverse(String str) {
		return isNotBlank(str) ? new StringBuilder(str).reverse().toString() : "";
	}

	public static String trimLeft(String input) {
		Assert.isNull(input);
		String s = input.trim();
		return input.substring(input.indexOf(s));
	}

	public static String trimRight(String input) {
		Assert.isNull(input);
		String s = input.trim();
		int i = input.indexOf(s);
		return input.substring(0, i + s.length());
	}

	public static boolean isEmpty(CharSequence str) {
		if ((str == null) || (str.length() == 0)) {
			return true;
		}
		return false;
	}

	public static boolean isNotEmpty(CharSequence str) {
		return !isEmpty(str);
	}

	public static boolean isBlank(CharSequence str) {
		if (isEmpty(str)) {
			return true;
		}
		for (int i = 0; i < str.length(); i++) {
			if (Character.isWhitespace(str.charAt(i)) == false) {
				return false;
			}
		}
		return true;
	}

	public static boolean isNotBlank(CharSequence str) {
		return !isBlank(str);
	}

	public static String join(String[] array) {
		return join(array, ",");
	}

	public static String join(String[] array, String delim) {
		return join(array, EMPTY, delim);
	}

	public static String join(String[] array, String preAndSuf, String delim) {
		return join(array, preAndSuf, preAndSuf, delim);
	}

	public static String join(String[] array, String prefix, String suffix, String delim) {
		if (array == null) {
			return "";
		}
		StringBuilder str = new StringBuilder();
		for (int i = 0, l = array.length; i < l; i++) {
			str.append(prefix);
			str.append(array[i]);
			str.append(suffix);
			if (i != l - 1) {
				str.append(delim);
			}
		}
		return str.toString();
	}

	public static String padding(int length) {
		return repeat(BLANK, length);
	}

	public static String repeat(String str, int length) {
		return repeat(str, null, length);
	}

	public static String repeat(String str, String delim, int length) {
		Assert.isNull(str, "String must not be null.");
		if (delim == null) {
			delim = "";
		}
		StringBuilder result = new StringBuilder();
		for (int i = 0; i < length; i++) {
			result.append(str);
			if (i != length - 1) {
				result.append(delim);
			}
		}
		return result.toString();
	}

	public static String leftPadding(String str, int length) {
		return leftPadding(str, BLANK, length);
	}

	public static String leftPadding(String str, String place, int length) {
		Assert.isNull(str, "String must not be null.");
		length = Math.max(str.length(), length);
		int n = length - str.length();
		if (n > 0) {
			return repeat(place, n) + str;
		}
		return str;
	}

	public static String rightPadding(String str, int length) {
		return rightPadding(str, BLANK, length);
	}

	public static String rightPadding(String str, String place, int length) {
		Assert.isNull(str, "String must not be null.");
		length = Math.max(str.length(), length);
		int n = length - str.length();
		if (n > 0) {
			return str + repeat(place, n);
		}
		return str;
	}

	public static String toUpperCase(String s, int... indexes) {
		Assert.hasNoText(s);
		StringBuilder result = new StringBuilder(s);
		for (int index : indexes) {
			result.setCharAt(index, Character.toUpperCase(s.charAt(index)));
		}
		return result.toString();
	}

	public static String toLowerCase(String s, int... indexes) {
		Assert.hasNoText(s);
		StringBuilder result = new StringBuilder(s);
		for (int index : indexes) {
			result.setCharAt(index, Character.toLowerCase(s.charAt(index)));
		}
		return result.toString();
	}

	public static String uncapitalize(String str) {
		return toLowerCase(str, 0);
	}

	public static String capitalize(String str) {
		return toUpperCase(str, 0);
	}

	public static String insert(String str, String substr, int index) {
		Assert.isNull(str, "Source string must not be null.");
		Assert.isNull(substr, "Substring must not be null.");
		return new StringBuilder(str).insert(index, substr).toString();
	}

	public static String thumb(CharSequence cs, int length) {
		Assert.hasNoText(cs);
		String s = cs.subSequence(0, Math.min(cs.length(), length)).toString();
		return cs.length() > length ? s + "..." : s;
	}

	public static String substring(String s, int to) {
		return substring(s, 0, to);
	}

	public static String substring(String s, int from, int to) {
		Assert.hasNoText(s);
		return s.substring(from, Math.min(to, s.length()));
	}

	public static List split(CharSequence source, String example) {
		return split(source, example, false);
	}

	public static List split(CharSequence source, String example, boolean returnDelims) {
		return split(source, example, returnDelims, true);
	}

	public static List split(CharSequence source, String example, boolean returnDelims, boolean returnEmpty) {
		Assert.hasNoText(source);
		if (isBlank(example)) {
			example = BLANK_CHARACTER;
		}
		StringTokenizer tokenizer = new StringTokenizer(source.toString(), example, returnDelims);
		List list = new ArrayList();
		String s;
		while (tokenizer.hasMoreTokens()) {
			s = tokenizer.nextToken();
			if (returnEmpty || isNotBlank(s)) {
				list.add(s);
			}
		}
		return list;
	}

	public static List split(CharSequence source, String[] delimiters) {
		return split(source, delimiters, false);
	}

	public static List split(CharSequence source, String[] delimiters, boolean returnDelim) {
		return split(source, delimiters, returnDelim, true);
	}

	public static List split(CharSequence source, String[] delimiters, boolean returnDelims, boolean returnEmpty) {
		Assert.hasNoText(source);
		Assert.isNull(delimiters, "Delimeters must not be null.");
		SubstrTokenizer tokenizer = new SubstrTokenizer(source, delimiters, returnDelims);
		List list = new ArrayList();
		String s;
		while (tokenizer.hasMoreElements()) {
			s = tokenizer.nextElement();
			if (returnEmpty || isNotBlank(s)) {
				list.add(s);
			}
		}
		return list;
	}

	public static Map splitAsMap(CharSequence source, String example) {
		Assert.hasNoText(source);
		if (isBlank(example)) {
			example = BLANK_CHARACTER;
		}
		Map result = new LinkedHashMap();
		StringTokenizer tokenizer = new StringTokenizer(source.toString(), example, false);
		String s, t = null;
		while (tokenizer.hasMoreTokens()) {
			s = tokenizer.nextToken();
			if (t == null) {
				t = s;
			} else {
				result.put(t, s);
				t = null;
			}
		}
		if (t != null) {
			result.put(t, null);
		}
		return result;
	}

	public static Map splitAsMap(CharSequence source, String example, String delimiter) {
		Assert.hasNoText(source);
		Assert.hasNoText(delimiter);
		if (isBlank(example)) {
			example = BLANK_CHARACTER;
		}
		Map result = new LinkedHashMap();
		StringTokenizer tokenizer = new StringTokenizer(source.toString(), example, false);
		String s;
		int i, n = delimiter.length();
		while (tokenizer.hasMoreTokens()) {
			s = tokenizer.nextToken();
			if (isNotBlank(s)) {
				if ((i = s.indexOf(delimiter)) > 0) {
					result.put(s.substring(0, i), s.substring(i + n));
				} else {
					result.put(s, null);
				}
			}
		}
		return result;
	}

	public static Map splitAsMap(CharSequence source, String[] delimiters) {
		Assert.hasNoText(source);
		Assert.isNull(delimiters, "Delimeters must not be null.");
		Map result = new LinkedHashMap();
		SubstrTokenizer tokenizer = new SubstrTokenizer(source, delimiters, false);
		String s, t = null;
		while (tokenizer.hasMoreTokens()) {
			s = tokenizer.nextToken();
			if (isNotBlank(s)) {
				if (t == null) {
					t = s;
				} else {
					result.put(t, s);
					t = null;
				}
			}
		}
		if (t != null) {
			result.put(t, null);
		}
		return result;
	}

	public static Map splitAsMap(CharSequence source, String[] delimiters, String secondDelimiter) {
		Assert.hasNoText(source);
		Assert.isNull(delimiters, "Delimeters must not be null.");
		Assert.hasNoText(secondDelimiter);
		Map result = new LinkedHashMap();
		SubstrTokenizer tokenizer = new SubstrTokenizer(source, delimiters, false);
		String s;
		int i, n = secondDelimiter.length();
		while (tokenizer.hasMoreTokens()) {
			s = tokenizer.nextToken();
			if (isNotBlank(s)) {
				if (n > 0 && (i = s.indexOf(secondDelimiter)) > 0) {
					result.put(s.substring(0, i), s.substring(i + n));
				} else {
					result.put(s, null);
				}
			}
		}
		return result;
	}

	public static String toCamelCase(String str) {
		return toCamelCase(str, "_");
	}

	public static String toCamelCase(String str, String join) {
		Assert.hasNoText(str);
		Assert.hasNoText(join);
		StringBuilder result = new StringBuilder();
		StringTokenizer tokenizer = new StringTokenizer(str, join, false);
		String token;
		int len;
		while (tokenizer.hasMoreTokens()) {
			token = tokenizer.nextToken();
			len = result.length();
			result.append(token);
			if (len > 0) {
				result.setCharAt(len, Character.toUpperCase(token.charAt(0)));
			}
		}
		return result.toString();
	}

	public static String toSegmentCase(String str) {
		return toSegmentCase(str, "_");
	}

	public static String toSegmentCase(String str, String join) {
		Assert.hasNoText(str);
		Assert.isNull(join);
		StringBuilder result = new StringBuilder();
		char[] src = str.toCharArray();
		for (char c : src) {
			if (Character.isUpperCase(c)) {
				result.append(join).append(Character.toLowerCase(c));
			} else {
				result.append(c);
			}
		}
		return result.toString();
	}

	public static boolean notEquals(String left, String right) {
		return !equals(left, right);
	}

	public static boolean equals(String left, String right) {
		return left == null ? right == null : left.equals(right);
	}

	public static boolean notEqualsStrictly(String left, String right) {
		return !equalsStrictly(left, right);
	}

	public static boolean equalsStrictly(String left, String right) {
		return isBlank(left) ? isBlank(right) : left.equals(right);
	}

	public static boolean notEqualsIgnoreCase(String left, String right) {
		return !equalsIgnoreCase(left, right);
	}

	public static boolean equalsIgnoreCase(String left, String right) {
		return left == null ? right == null : left.equalsIgnoreCase(right);
	}

	public static boolean notEqualsIgnoreCaseStrictly(String left, String right) {
		return !equalsIgnoreCaseStrictly(left, right);
	}

	public static boolean equalsIgnoreCaseStrictly(String left, String right) {
		return isBlank(left) ? isBlank(right) : left.equalsIgnoreCase(right);
	}

	public static boolean hasContent(String left, String right) {
		return isBlank(left) ? isNotBlank(right) : isBlank(right);
	}

	public static void main(String[] args) throws Exception {
		System.out.println(capitalize("lastModfied"));
	}

	public static String parseText(String text, String prefix, String suffix, Object... args) {
		Assert.hasNoText(text, "Can't parse blank text.");
		Assert.hasNoText(prefix, "Prefix string is required.");
		Assert.hasNoText(suffix, "Suffix string is required.");
		if (args == null || args.length == 0) {
			return text;
		}
		PlaceholderTokenizer placeholderTokenizer = new PlaceholderTokenizer(prefix, suffix);
		return placeholderTokenizer.parse(text, str -> {
			return args[Integer.parseInt(str)];
		});
	}

	public static String parseText(String text, String prefix, String suffix, Map params) {
		Assert.hasNoText(text, "Can't parse blank text.");
		Assert.hasNoText(prefix, "Prefix string is required.");
		Assert.hasNoText(suffix, "Suffix string is required.");
		if (params == null || params.size() == 0) {
			return text;
		}
		PlaceholderTokenizer placeholderTokenizer = new PlaceholderTokenizer(prefix, suffix);
		return placeholderTokenizer.parse(text, key -> {
			return params.get(key);
		});
	}

	public static String parseText(String text, String token, final Map params) {
		Assert.hasNoText(text, "Can't parse blank text.");
		Assert.hasNoText(token, "Token string is required.");
		if (params == null || params.size() == 0) {
			return text;
		}
		PrefixationTokenizer prefixationTokenizer = new PrefixationTokenizer(token);
		return prefixationTokenizer.parse(text, key -> {
			return params.get(key);
		});
	}

	public static String parseText(String text, String token, final Object... args) {
		Assert.hasNoText(text, "Can't parse blank text.");
		Assert.hasNoText(token, "Token string is required.");
		if (args == null || args.length == 0) {
			return text;
		}
		PrefixationTokenizer prefixationTokenizer = new PrefixationTokenizer(token);
		return prefixationTokenizer.parse(text, str -> {
			return args[Integer.parseInt(str)];
		});
	}

	public static String format(String text, String token, final Object... args) {
		Assert.hasNoText(text, "Can't parse blank text.");
		Assert.hasNoText(token, "Token string is required.");
		if (args == null || args.length == 0) {
			return text;
		}
		SimpleTokenizer simpleTokenizer = new SimpleTokenizer(token);
		return simpleTokenizer.parse(text, index -> {
			return args[Integer.min(index, args.length - 1)];
		});
	}

	public static String unicodeEscape(String unicodeString) {
		Assert.hasNoText(unicodeString);
		StringBuilder content = new StringBuilder();
		for (String str : split(unicodeString, "\\u")) {
			content.append((char) Integer.parseInt(str, 16));
		}
		return content.toString();
	}

	public static String unicodeString(String str) {
		StringBuilder content = new StringBuilder();
		for (char c : str.toCharArray()) {
			content.append(Chars.toUnicode(c));
		}
		return content.toString();
	}

	public static boolean isAlpha(CharSequence str) {
		if (str == null || str.length() == 0) {
			return false;
		}
		int l = str.length();
		for (int i = 0; i < l; i++) {
			if (Character.isLetter(str.charAt(i)) == false) {
				return false;
			}
		}
		return true;
	}

	public static boolean isNumeric(CharSequence str) {
		if (str == null || str.length() == 0) {
			return false;
		}
		int l = str.length();
		for (int i = 0; i < l; i++) {
			if (Character.isDigit(str.charAt(i)) == false) {
				return false;
			}
		}
		return true;
	}

	public static int count(String str, String substr) {
		int count = 0;
		int idx = 0;
		while (INDEX_NOT_FOUND != (idx = str.indexOf(substr, idx))) {
			count++;
			idx += substr.length();
		}
		return count;
	}

	public static int count(String str, char c) {
		int count = 0;
		int idx = 0;
		while (INDEX_NOT_FOUND != (idx = str.indexOf(c, idx))) {
			count++;
			idx += 1;
		}
		return count;
	}

	public static String replaceFirst(String template, String placeholder, String replacement) {
		Assert.hasNoText(template);
		Assert.hasNoText(placeholder);
		Assert.hasNoText(replacement);
		int loc = template.indexOf(placeholder);
		if (loc < 0) {
			return template;
		} else {
			return template.substring(0, loc).concat(replacement).concat(template.substring(loc + placeholder.length()));
		}
	}

	private final static LruMap messageFormatCache = new LruMap(128);

	public static MessageFormat getMessageFormat(String pattern) {
		MessageFormat mf = messageFormatCache.get(pattern);
		if (mf == null) {
			messageFormatCache.put(pattern, new MessageFormat(pattern, Locale.ENGLISH));
			mf = messageFormatCache.get(pattern);
		}
		return mf;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy