package message.utils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 对字符串进行处理的工具类
*
* @author sunhao(sunhao.java@gmail.com)
*/
public class StringUtils extends org.apache.commons.lang.StringUtils {
private static final String DEFAULT_DELIMITERS = ",";
/**
* 私有化构造器
*/
private StringUtils() {
}
/**
* 判断是否为空
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
return str == null || str.trim().length() == 0;
}
/**
* 判断是否是非空
*
* @param str
* @return
*/
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
/**
* 传入的字符串是否在传入的数组中
*
* @param strings
* @param string
* @return
*/
public static boolean contains(String[] strings, String string) {
if (strings == null || strings.length == 0)
return false;
if (string == null)
return false;
for (int i = 0; i < strings.length; i++) {
if (strings[i].equals(string)) {
return true;
}
}
return false;
}
/**
* 字符串转成base64的
*
* @param baseString
* @return
*/
public static String encodeBase64(String baseString) {
String result = null;
if (isNotBlank(baseString)) {
result = new String(Base64.encodeBase64(baseString.getBytes()));
}
return result;
}
/**
* base64的字符串转成正常字符串(解码)
*
* @param baseString
* @return
*/
public static String decodeBase64(String baseString) {
String result = null;
if (isNotBlank(baseString)) {
result = new String(Base64.decodeBase64(baseString));
}
return result;
}
/**
* 将list中元素转化成字符串类型。list中值为null的元素将被删除
*
* @param list 要被转化的集合
* @return 包含字符串的集合
*/
public static List toStringList(List list) {
List result = new ArrayList(list.size());
Object obj;
for (int i = 0; i < list.size(); i++) {
obj = list.get(i);
if (obj != null) {
result.add(obj.toString());
}
}
return result;
}
/**
* 有待研究
*
* @param strcontent
* @param oldstr
* @param newstr
* @param len
* @return
*/
public static String replaceString(String strcontent, String oldstr,
String newstr, int len) {
StringBuffer buffer = new StringBuffer();
int pos = 0;
int i = 0;
for (i = strcontent.indexOf(oldstr, pos); i >= 0; i = strcontent
.indexOf(oldstr, pos)) {
buffer.append(strcontent.substring(pos, i));
buffer.append(newstr);
pos = i + len;
}
buffer.append(strcontent.substring(pos));
return buffer.toString();
}
/**
* 按传入的字符分隔字符串
*
* @param str
* @param character
* @return
*/
public static String[] split(String str, String character) {
StringTokenizer stk = new StringTokenizer(str, character);
List list = new ArrayList();
for (; stk.hasMoreTokens(); list.add(stk.nextToken()))
;
String strs[] = new String[list.size()];
list.toArray(strs);
return strs;
}
/**
* 传入的字符串是否在传入的数组中
*
* @param string
* @param strings
* @return
*/
public static boolean contain(String string, String strings[]) {
if (strings == null)
return false;
for (int i = 0; i < strings.length; i++) {
String s = strings[i];
if (string.equals(s))
return true;
}
return false;
}
/**
* 获取字符串中两个字符中间的那段字符串
*
* @param string
* @param first
* @param second
* @return
*/
public static String getBetweenTwoLetters(String string, String first, String second) {
if (isEmpty(string)) {
return EMPTY;
} else {
int firstIndex = StringUtils.indexOf(string, first);
int secondIndex = StringUtils.indexOf(string, second);
return StringUtils.substring(string, firstIndex + 1, secondIndex);
}
}
/**
* 对StringBuffer切割
*
* @param src 源
* @param start
* @param end
* @return
*/
public static StringBuffer substringbuffer(StringBuffer src, int start, int end) {
String result = substring(src.toString(), start, end);
return new StringBuffer(result);
}
/**
* 对StringBuffer切割
*
* @param src 源
* @param start
* @return
*/
public static StringBuffer substringbuffer(StringBuffer src, int start) {
String result = substring(src.toString(), start);
return new StringBuffer(result);
}
/**
* 获取给定字符串中符合正则表达式的片段个数
*
* @param text 给定字符串
* @param excerpt 片段的正则表达式
* @return
*/
public static int hasExcerpt(String text, String excerpt) {
Assert.hasText(text, "text不能为空!");
Assert.hasText(excerpt, "excerpt不能为空!");
Pattern pattern = Pattern.compile(excerpt);
Matcher matcher = pattern.matcher(text);
int i = 0;
while (matcher.find()) {
i++;
}
return i;
}
/**
* 将给定的字符串按<code>character</code>分割后,转换成指定类型的数据类型的集合
*
* @param str 给定的字符串
* @param character 分割符
* @param parse 类型转换器
* @param <T>
* @return
*/
public static <T> List<T> convert(String str, String character, StringParse<T> parse) {
if (StringUtils.isEmpty(str) || StringUtils.isEmpty(character) || parse == null) {
return Arrays.asList();
}
String[] temps = split(str, character);
List<T> result = new ArrayList<T>();
for (String t : temps) {
result.add(parse.parse(t));
}
return result;
}
/**
* 将给定的字符串按{@link #DEFAULT_DELIMITERS}分割后,转换成指定类型的数据类型的集合
*
* @param str 给定的字符串
* @param parse 类型转换器
* @param <T>
* @return
*/
public static <T> List<T> convert(String str, StringParse<T> parse) {
return convert(str, DEFAULT_DELIMITERS, parse);
}
/**
* list转成字符串数组
*
* @param list 集合
* @param containNull 当为null的时候,是否放入空字符串
* @return
*/
public static String[] convert(List<?> list, boolean containNull) {
if (CollectionUtils.isEmpty(list)) {
return null;
}
List<String> ss = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
if (obj == null && !containNull) {
continue;
}
if (obj == null) {
ss.add(StringUtils.EMPTY);
} else {
ss.add(obj.toString());
}
}
return ss.toArray(new String[ss.size()]);
}
}