package com.huawei.bfm.common.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* 字符串处理通用工具类
*
* @author tjw
* @date [Nov 29, 2012]
* @version [NGSDP LB5213]
*/
public final class StringUtils
{
/** 空字符串 */
public static final String EMPTY = "";
// SQL关键字,匹配所有字符
private static final String SQL_KEYWORD_STRING = "%";
// SQL关键字,匹配单个字符
private static final String SQL_KEYWORD_CHAR = "_";
// SQL关键字,转义符
private static final String SQL_KEYWORD_ESCAPE = "\\";
// 默认join 分割符
private static final String DEFULT_JOIN_SEPARATOR = ",";
// 默认封装 标示符
private static final String DEFULT_WRAP_FLAG = "'";
private StringUtils()
{
}
/**
* 截取目标字符串后面的字符串,以第一个开始截取
*
* @param str
* 待处理字符串
* @param separator
* 分隔符号
* @return 处理后的字符串
*/
public static String substringAfter(String str, String separator)
{
if (contains(str, separator))
{
return org.apache.commons.lang.StringUtils.substringAfter(str, separator);
}
return str;
}
/**
* 截取目标字符串后面的字符串,以最后一个开始截取
*
* @param str
* 待处理字符串
* @param separator
* 分隔符号
* @return 处理后的字符串
*/
public static String substringAfterLast(String str, String separator)
{
if (contains(str, separator))
{
return org.apache.commons.lang.StringUtils.substringAfterLast(str, separator);
}
return str;
}
/**
* 去除字符串前缀
*
* @param str
* 待处理字符串
* @param prefix
* 前缀
* @return 处理完的字符串
*/
public static String removePrefix(String str, String prefix)
{
if (isNotBlank(str, prefix))
{
if (str.startsWith(prefix))
{
return str.substring(prefix.length());
}
}
return str;
}
/**
* 添加字符串前缀
*
* @param str
* 待处理字符串
* @param prefix
* 前缀
* @return 处理完的字符串
*/
public static String appendPrefix(String str, String prefix)
{
if (isNotBlank(str, prefix))
{
if (!str.startsWith(prefix))
{
return prefix + str;
}
}
return str;
}
/**
* 去除字符串后缀
*
* @param str
* 待处理字符串
* @param subfix
* 后缀
* @return 处理完的字符串
*/
public static String removeSubfix(String str, String subfix)
{
if (isNotBlank(str, subfix))
{
if (str.endsWith(subfix))
{
return str.substring(0, str.length() - subfix.length());
}
}
return str;
}
/**
* 添加字符串后缀
*
* @param str
* 待处理字符串
* @param subfix
* 后缀
* @return 处理完的字符串
*/
public static String appendSubfix(String str, String subfix)
{
if (isNotBlank(str, subfix))
{
if (!str.endsWith(subfix))
{
return str + subfix;
}
}
return str;
}
/**
* 首字母转换成大写
*
* @param str
* 待转换字符串
* @return 转换后字符串
*/
public static String capitalize(String str)
{
return org.apache.commons.lang.StringUtils.capitalize(str);
}
/**
* 目标字符串是否包含字串
*
* @param str
* 目标字符串
* @param searchStr
* 子字符串
* @return 目标字符串是否包含字串
*/
public static boolean contains(String str, String searchStr)
{
return org.apache.commons.lang.StringUtils.contains(str, searchStr);
}
/**
* 默认字符串
*
* 如果目标字符串为 null 返回 空串,否则返回原始字符串
*
* @param str
* 目标字符串
* @return 默认字符串
*/
public static String defaultString(String str)
{
return org.apache.commons.lang.StringUtils.defaultString(str);
}
/**
* 默认字符串
*
* 如果目标字符串为 null 返回 空串,否则返回原始字符串
*
* @param str
* 目标字符串
* @param defaultStr
* 默认字符串
* @return 默认字符串
*/
public static String defaultString(String str, String defaultStr)
{
return org.apache.commons.lang.StringUtils.defaultString(str, defaultStr);
}
/**
* 字符串比对是否相同,
*
* @param str
* 待比较字符串
* @param strs
* 待比较字符串数组 ,任何一个字符串与目标字符串匹配成功则匹配成功
* @return 比较结果
*/
public static boolean equals(String str, String... strs)
{
if (ArrayUtils.isNotEmpty(strs))
{
for (String s : strs)
{
if (org.apache.commons.lang.StringUtils.equals(s, str))
{
return true;
}
}
return false;
}
else
{
return null == str;
}
}
/**
* SQL编码
*
* <pre>
* 将 \ _ % 等特殊字符前补加\转意符,
* </pre>
*
* @param str
* 未编码字符串
* @return 编码后字符串
*/
public static String escapeSql(String str)
{
if (isNotBlank(str))
{
str = str.replace(SQL_KEYWORD_ESCAPE, SQL_KEYWORD_ESCAPE + SQL_KEYWORD_ESCAPE);
str = str.replace(SQL_KEYWORD_CHAR, SQL_KEYWORD_ESCAPE + SQL_KEYWORD_CHAR);
str = str.replace(SQL_KEYWORD_STRING, SQL_KEYWORD_ESCAPE + SQL_KEYWORD_STRING);
}
return str;
}
/**
* 获取模糊查询字符串
*
* <pre>
* 字符串前后添加 % 符号
* </pre>
*
* @param str
* 待模糊查询字符串
* @return 拼接相关模糊查询标识的字符串
*/
public static String getFuzzyString(String str)
{
if (isNotBlank(str))
{
str = SQL_KEYWORD_STRING + str + SQL_KEYWORD_STRING;
}
return str;
}
/**
* 获取模糊查询字符串,特殊字符进行转义
*
*
* <pre>
* 1、将 \ _ % 等特殊字符前补加\转意符,
* 2、字符串前后添加 % 符号
* </pre>
*
* @param str
* 待模糊查询字符串
* @return 拼接相关模糊查询标识的字符串
*/
public static String getFuzzyStringWithEscape(String str)
{
if (isNotBlank(str))
{
return getFuzzyString(escapeSql(str));
}
return null;
}
/**
* 获取被检索字符串在目标字符串中的索引的位置
*
* @param str
* 目标字符串
* @param searchChars
* 被检索字符串
* @return 索引的位置
*/
public static int indexOfAny(String str, String searchChars)
{
return org.apache.commons.lang.StringUtils.indexOfAny(str, searchChars);
}
/**
* 获取被检索字符串在目标字符串中的索引的位置
*
* @param str
* 目标字符串
* @param searchChars
* 被检索字符串
* @return 索引的位置
*/
public static int indexOfAny(String str, String[] searchChars)
{
return org.apache.commons.lang.StringUtils.indexOfAny(str, searchChars);
}
/**
* 是否为空
*
* @param str
* 待校验字符串
* @return 是否为空
*/
public static boolean isBlank(String str)
{
return org.apache.commons.lang.StringUtils.isBlank(str);
}
/**
* 判断字符串指定范围的字符是否全部是数字。
*
* @param str
* 输入的字符串
* @param begin
* 起始下标,包括这个字符
* @param end
* 结束下标,不包括这个字符
* @return 如果范围内的字符都是数字返回true,否则返回false
*/
public static boolean isDigitInRange(String str, int begin, int end)
{
if (isBlank(str))
{
return false;
}
if (begin < 0 || end < 0 || begin >= end)
{
return false;
}
if (str.length() <= end)
{
return false;
}
for (int i = begin; i < end; i++)
{
if (!Character.isDigit(str.charAt(i)))
{
return false;
}
}
return true;
}
/**
* 是否为空
*
* @param str
* 待校验字符串
* @return 是否为空
*/
public static boolean isEmpty(String str)
{
return org.apache.commons.lang.StringUtils.isEmpty(str);
}
/**
* 是否非空
*
* 任何一个字符串为空,将范围false
*
* @param strs
* 待校验字符串
* @return 是否非空
*/
public static boolean isNotBlank(String... strs)
{
if (null == strs)
{
return false;
}
for (String str : strs)
{
if (!org.apache.commons.lang.StringUtils.isNotBlank(str))
{
return false;
}
}
return true;
}
/**
* 是否非空
*
* 任何一个字符串为空,将范围false
*
* @param strs
* 待校验字符串
* @return 是否非空
*/
public static boolean isNotEmpty(String... strs)
{
if (null == strs)
{
return false;
}
for (String str : strs)
{
if (!org.apache.commons.lang.StringUtils.isNotEmpty(str))
{
return false;
}
}
return true;
}
/**
* 是否是数字
*
* @param str
* 目标字符串
* @return 是否是数字
*/
public static boolean isNumeric(String str)
{
return org.apache.commons.lang.StringUtils.isNumeric(str);
}
/**
* 使用 , 拼接集合
*
* @param col
* 待拼接集合对象
* @return 拼接后的字符串
*/
public static String join(Collection<?> col)
{
return join(col, DEFULT_JOIN_SEPARATOR);
}
/**
* 拼接集合数据
*
* @param col
* 待拼接集合
* @param separator
* 分隔符
* @return 拼接后的集合数据
*/
public static String join(Collection<?> col, String separator)
{
return org.apache.commons.lang.StringUtils.join(col, separator);
}
/**
* 拼接集合数据
*
* @param strs
* 待拼接集合
* @param separator
* 分隔符
* @return 拼接后的集合数据
*/
public static String join(Object[] strs, String separator)
{
return org.apache.commons.lang.StringUtils.join(strs, separator);
}
/**
* 左补齐字符串
*
* @param str
* 待补齐字符串
* @param size
* 字符串长度
* @param padChar
* 补齐字符
* @return 补齐后字符串
*/
public static String leftPad(String str, int size, char padChar)
{
return org.apache.commons.lang.StringUtils.leftPad(str, size, padChar);
}
/**
* 左补齐字符串
*
* @param str
* 待补齐字符串
* @param size
* 字符串长度
* @param padStr
* 补齐字符
* @return 补齐后字符串
*/
public static String leftPad(String str, int size, String padStr)
{
return org.apache.commons.lang.StringUtils.leftPad(str, size, padStr);
}
/**
* 转换成小写字母
*
* @param str
* 目标字符串
* @return 转换成小写字母
*/
public static String lowerCase(String str)
{
return org.apache.commons.lang.StringUtils.lowerCase(str);
}
/**
* 分割字符串
*
* @param str
* 目标字符串
* @param separator
* 分隔符
* @return 分割后的集合数据
*/
public static String[] split(String str, char separator)
{
return org.apache.commons.lang.StringUtils.split(str, separator);
}
/**
* 分割字符串
*
* @param str
* 目标字符串
* @return 分割后的集合数据
*/
public static String[] split(String str)
{
return org.apache.commons.lang.StringUtils.split(str);
}
/**
* 分割字符串
*
* @param str
* 目标字符串
* @param separator
* 分隔符
* @return 分割后的集合数据
*/
public static String[] split(String str, String separator)
{
return org.apache.commons.lang.StringUtils.split(str, separator);
}
/**
* 获取子串
*
* @param str
* 目标字符串
* @param start
* 起始索引
*
* @return 子串
*/
public static String substring(String str, int start)
{
return org.apache.commons.lang.StringUtils.substring(str, start);
}
/**
* 获取子串
*
* @param str
* 目标字符串
* @param start
* 起始索引
* @param end
* 结束索引
*
* @return 子串
*/
public static String substring(String str, int start, int end)
{
return org.apache.commons.lang.StringUtils.substring(str, start, end);
}
/**
* 转换成字符串
*
* @param obj
* obj
* @return String
*/
public static String toString(Object obj)
{
return obj == null ? null : obj.toString();
}
/**
* 去空格字符串
*
* @param str
* 目标字符串
* @return 去空格后的字符串
*/
public static String trim(String str)
{
return org.apache.commons.lang.StringUtils.trim(str);
}
/**
* 去空格字符串,如果字符串为empty则返回null
*
* @param str
* 目标字符串
* @return 去空格后的字符串
*/
public static String trimToNull(String str)
{
return org.apache.commons.lang.StringUtils.trimToNull(str);
}
/**
* 去空格字符串,如果字符串为empty则返回""
*
* @param str
* 目标字符串
* @return 去空格后的字符串
*/
public static String trimToEmpty(String str)
{
return org.apache.commons.lang.StringUtils.trimToEmpty(str);
}
/**
* 转换成大写字母
*
* @param str
* 目标字符串
* @return 转换成大写字母
*/
public static String upperCase(String str)
{
return org.apache.commons.lang.StringUtils.upperCase(str);
}
/**
* 使用单引号包装字符串
*
*
* @param str
* str
* @param flag
* flag
* @return String
*/
public static String warp(String str, String flag)
{
if (isBlank(flag))
{
flag = DEFULT_WRAP_FLAG;
}
StringBuilder sb = new StringBuilder();
sb.append(flag).append(str).append(flag);
return sb.toString();
}
/**
* 截取字符串
*
* @param str
* 待截取字符串
* @param len
* 字符长度
* @return 截取后的字符串
*/
public static String left(String str, int len)
{
return org.apache.commons.lang.StringUtils.left(str, len);
}
/**
* 字符串XML解码
*
* @param str
* 待解码字符串
* @return 解码后字符串
*/
public static String unescapeXml(String str)
{
return StringEscapeUtils.unescapeXml(str);
}
/**
* 反射对象成String类型
*
* @param obj
* 对象
* @return 反射后的字符串
*/
public static String reflectionToString(Object obj)
{
return ToStringBuilder.reflectionToString(obj);
}
/**
* 分割字符串
*
* @param str
* 目标字符串
* @param separator
* 分隔符
* @return 分割后的集合数据
*/
public static List<Long> splitToLongList(String str, String separator)
{
List<Long> list = new ArrayList<Long>();
if (isNotEmpty(str))
{
String[] strs = split(str, separator);
for (String s : strs)
{
list.add(NumberUtils.toLong(s));
}
}
return list;
}
}