2021-01-27 14:24:17 +08:00

761 lines
22 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.lz.common.utils;
import org.apache.commons.lang.StringUtils;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 陈金虎 2017年1月16日 下午11:43:50
* @类描述:字符串工具类
* @注意:本内容仅限于杭州霖梓网络科技有限公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class StringUtil extends StringUtils {
public static final Long INVITE_START_VALUE = 16796251L;
private static final String COMMA = ",";
private static final String[] DUOTRIKEY = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V"};
private static final String[] CARDINALNUM = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
private static final String[] NUMBERS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
/**
* 通过StringBuffer来组装字符串
*
* @param strings
* @return
*/
public static String appendStrs(Object... strings) {
StringBuffer sb = new StringBuffer();
for (Object str : strings) {
sb.append(str);
}
return sb.toString();
}
/**
* 判断所有传入参数是否非空当传入参数长度为0或者任意有一个为空则返回false所有都非空则返回true
*
* @param strArr
* @return
*/
public static boolean isAllNotEmpty(String... strArr) {
boolean isAllNotEmpty = true;
if (strArr == null || strArr.length < 1) {
isAllNotEmpty = false;
return isAllNotEmpty;
}
for (String str : strArr) {
if (str == null || str.length() == 0) {
isAllNotEmpty = false;
break;
}
}
return isAllNotEmpty;
}
/**
* 把list按分隔符转换成字符串
*
* @param strList list数据
* @param separator 分隔符
* @return
*/
public static String turnListToStr(Collection<String> strList, String separator) {
String result = "";
if (strList == null || strList.size() < 1) {
return result;
}
if (separator == null) {
separator = ",";
}
for (String item : strList) {
result = result + separator + item;
}
return result.substring(separator.length());
}
/**
* 把字符串数组按分隔符转化成字符串
*
* @param strArr 字符串数组
* @param separator 分隔符
* @return
*/
public static String turnArrayToStr(String separator, String... strArr) {
String result = "";
if (strArr == null || strArr.length < 1) {
return result;
}
if (separator == null) {
separator = ",";
}
for (String item : strArr) {
result = result + separator + item;
}
return result.substring(separator.length());
}
public static String strToSecret(String str, int left, int right) {
StringBuffer sb = new StringBuffer();
int len = str.length() - left - right;
if (len > 0) {
sb.append(str.substring(0, left));
for (int i = 0; i < len; i++) {
sb.append("*");
}
sb.append(str.substring(str.length() - right));
} else {
return str;
}
return sb.toString();
}
public static String getNotEmptyString(String str) {
return StringUtils.isNotEmpty(str) ? str : StringUtils.EMPTY;
}
public static String getLastString(String str, int num) {
int len = str.length();
if (len <= num) {
return str;
} else {
return str.substring(len - num);
}
}
public static List<String> splitToList(String source, String sep) {
List<String> result = new ArrayList<String>();
if (isBlank(source)) {
return result;
}
String[] tempResult = source.split(sep);
for (String item : tempResult) {
result.add(item);
}
return result;
}
public static List<Long> splitToLongList(String source, String sep) {
List<Long> result = new ArrayList<Long>();
if (isBlank(source)) {
return result;
}
String[] tempResult = source.split(sep);
for (String item : tempResult) {
result.add(NumberUtil.objToLongDefault(item,0));
}
return result;
}
/**
* @param source 待处理字符串
* @return
* @方法描述将字符串中的emoji符号转换为*
* @author huyang 2017年4月6日下午12:38:04
* @注意:本内容仅限于杭州霖梓网络科技有限公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public static String filterEmoji(String source) {
if (source != null) {
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
source = emojiMatcher.replaceAll("*");
return source;
}
return source;
}
return source;
}
public static String null2Str(Object str) {
return (str != null) ? str.toString() : "";
}
public static String logisticsInfoDeal(String str) {
if (str == null || "暂无".equals(str.trim())) {
return "";
}
return str.trim();
}
/**
* @param sStr
* @return
* @Title: UrlEncoder
* @Description: 字符串编码
*/
public final static String UrlEncoder(String sStr) {
String sReturnCode = "";
try {
sReturnCode = URLEncoder.encode(null2Str(sStr), "utf-8");
} catch (Exception ex) {
}
return sReturnCode;
}
/**
* @param sStr
* @return
* @Title: UrlDecoder
* @Description: 字符串解码
*/
public static String UrlDecoder(String sStr) {
if (isEmpty(sStr)) {
return "";
} else {
String sReturnCode = sStr;
try {
sReturnCode = URLDecoder.decode(sStr, "utf-8");
} catch (Exception e) {
}
return sReturnCode;
}
}
/**
* fmai
* 获取第三方订单号
*
* @param type 类型标识固定3位强风控 type="qfk"
* @Param thirdMark 第三方标识,比如风控R,ups为U,YiBao为YM為魔蝎
*/
public static String getThirdNo(String type, String thirdMark, Long userId) {
/*if (StringUtil.isBlank(type) || type.length() != 3) {
throw new LtException(LtExceptionCode.UPS_ORDERNO_BUILD_ERROR);
}*/
if (userId != null) {
return StringUtil.appendStrs(type, thirdMark, getTimeStr(), getUniqueCode(userId));
} else {
return StringUtil.appendStrs(type, thirdMark, getTimeStr(), getFiveRandomNum());
}
}
/**
* 获取唯一编码
*
* @param userId
* @return
*/
public static String getUniqueCode(Long userId) {
return Long.toString((userId + INVITE_START_VALUE), 64);
}
/**
* fmai 根据基数产生随机四位数
*
* @return
*/
public static String getFourRandomNum() {
StringBuilder randomNum = new StringBuilder();
int length = CARDINALNUM.length;
Random random = new Random();
for (int i = 0; i < 4; i++) {
randomNum.append(CARDINALNUM[random.nextInt(length)]);
}
return randomNum.toString();
}
/**
* fmai 根据基数产生随机5位数
*
* @return
*/
public static String getFiveRandomNum() {
StringBuilder randomNum = new StringBuilder();
int length = CARDINALNUM.length;
Random random = new Random();
for (int i = 0; i < 5; i++) {
randomNum.append(CARDINALNUM[random.nextInt(length)]);
}
return randomNum.toString();
}
/**
* fmai 根据时间数据生产相应的字符串
*
* @return
*/
public static String getTimeStr() {
StringBuilder timeStr = new StringBuilder();
timeStr.append(toBinaryByTime());
timeStr.append(DateUtils.formatDate(new Date(), "mmssSSS"));
return timeStr.toString();
}
/**
* fmai 根据日期年月日时生成对应的32进制字符串
*
* @return
*/
public static String toBinaryByTime() {
StringBuilder binary = new StringBuilder();
Calendar cal = Calendar.getInstance();
int year = (cal.get(Calendar.YEAR) - 2000) % 32;
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
binary.append(DUOTRIKEY[year]).append(DUOTRIKEY[month]).append(DUOTRIKEY[day]).append(DUOTRIKEY[hour]);
return binary.toString();
}
/**
* 首字母大写
*
* @param s
* @return
*/
public static String firstCharUpperCase(String s) {
StringBuffer sb = new StringBuffer(s.substring(0, 1).toUpperCase());
sb.append(s.substring(1, s.length()));
return sb.toString();
}
/**
* 字符串空处理,去除首尾空格 如果str为null返回"",否则返回str
*
* @param str
* @return
*/
public static String isNull(String str) {
if (str == null) {
return "";
}
return str.trim();
}
/**
* 将对象转为字符串
*
* @param o
* @return
*/
public static String isNull(Object o) {
if (o == null) {
return "";
}
String str = "";
if (o instanceof String) {
str = (String) o;
} else {
str = o.toString();
}
return str.trim();
}
public static String removeDoubleChar(String str) {
if (str.indexOf("\"") == 0) {
str = str.substring(1, str.length()); //去掉第一个 "
}
if (str.lastIndexOf("\"") == (str.length() - 1)) {
str = str.substring(0, str.length() - 1); //去掉最后一个 "
}
return str;
}
/**
* 通过请求参数获取键值对
*
* @param requestParams
* @return
*/
public static Map<String, String> getRequestParams(Map requestParams) {
Map<String, String> params = new HashMap<String, String>();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
return params;
}
/**
* 除去数组中的空值和签名参数
*
* @param sArray 签名参数组
* @return 去掉空值与签名参数后的新签名参数组
*/
public static Map<String, String> paraFilter(Map<String, String> sArray) {
Map<String, String> result = new HashMap<String, String>();
if (sArray == null || sArray.size() <= 0) {
return result;
}
for (String key : sArray.keySet()) {
String value = sArray.get(key);
if (value == null || value.equals("") || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("signInfo")
|| key.equalsIgnoreCase("sign_type")) {
continue;
}
result.put(key, value);
}
return result;
}
/**
* 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
*
* @param params 需要排序并参与字符拼接的参数组
* @return 拼接后字符串
*/
public static String createLinkString(Map<String, String> params) {
List<String> keys = new ArrayList<String>(params.keySet());
Collections.sort(keys);
String prestr = "";
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
prestr = prestr + key + "=" + value;
} else {
prestr = prestr + key + "=" + value + "&";
}
}
return prestr;
}
/**
* 以逗号隔开的元素
*
* @param value
* @param i
* @return
*/
public static String getSpitStr(String value, int i) {
String values[] = value.split(",", value.length());
if (i == 0) {
i = i + 1;
}
if (values.length >= i) {
return values[i - 1];
} else {
return values[0];
}
}
/**
* fmai 根据时间数据生产相应的字符串
*
* @return
*/
public static String getTimeLongStr() {
StringBuilder timeStr = new StringBuilder();
timeStr.append(DateUtils.formatDate(new Date(), "yyyyMMddHHmmssSSS"));
return timeStr.toString();
}
/**
* 拼接get请求的url请求地址
*/
public static String getRqstUrl(String url, Map<String, String> params) {
StringBuilder builder = new StringBuilder(url);
boolean isFirst = true;
for (String key : params.keySet()) {
if (key != null && params.get(key) != null) {
if (isFirst) {
isFirst = false;
builder.append("?");
} else {
builder.append("&");
}
builder.append(key)
.append("=")
.append(params.get(key));
}
}
return builder.toString();
}
public static StringBuffer appendSb(String... strs) {
StringBuffer stringBuffer = new StringBuffer();
if (strs != null && strs.length > 0) {
for (int i = 0; i < strs.length; i++) {
stringBuffer.append(strs[i]);
}
}
return stringBuffer;
}
/**
* 截取一个字符串中两个字符串中间的字符串
*
* @param str
* @param strStart
* @param strEnd
* @return
*/
public static String subMidString(String str, String strStart, String strEnd) {
/* 找出指定的2个字符在 该字符串里面的 位置 */
int strStartIndex = str.indexOf(strStart);
int strEndIndex = str.indexOf(strEnd);
/* index 为负数 即表示该字符串中 没有该字符 */
if (strStartIndex < 0) {
return "字符串 :---->" + str + "<---- 中不存在 " + strStart + ", 无法截取目标字符串";
}
if (strEndIndex < 0) {
return "字符串 :---->" + str + "<---- 中不存在 " + strEnd + ", 无法截取目标字符串";
}
/* 开始截取 */
String result = str.substring(strStartIndex, strEndIndex).substring(strStart.length());
return result;
}
public static boolean getClassName(String className) {
return false;
}
/**
* Object转换String
*
* @param obj
* @return
*/
public static String objToString(Object obj) {
if (null != obj) {
return String.valueOf(obj);
} else {
return null;
}
}
/**
* 手机号的粗略校验(要求严谨时,慎用)
*
* @param inputStr
* @return
*/
public static boolean validateMblNo(String inputStr) {
boolean isValid = false;
Pattern pattern = Pattern.compile(Constant.REGEX_MOBILE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
isValid = true;
}
return isValid;
}
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern.compile("^((1[3-9][0-9]))\\d{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
/**
* 将String转换成列表分隔符为 ,
*
* @param strs 字符串
* @return 列表
*/
public static List<Long> strs2list(String strs) {
return strs2list(strs, ",");
}
/**
* 根据分隔符获取Long型的集合
*
* @param listStr
* @param symbol
* @return
*/
public static List<Long> strs2list(String listStr, String symbol) {
List<Long> iddList = CollectionConverterUtil.convertToListFromArray(listStr.split(symbol), new Converter<String, Long>() {
@Override
public Long convert(String source) {
return Long.parseLong(source);
}
});
return iddList;
}
public static String mobileEncrypt(String mobile) {
if (StringUtils.isEmpty(mobile) || (mobile.length() != 11)) {
return mobile;
}
return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
/**
* 将字符串的首字母转大写
*
* @param str 需要转换的字符串
* @return
*/
public static String captureName(String str) {
// 进行字母的ascii编码前移效率要高于截取字符串进行转换的操作
char[] cs = str.toCharArray();
cs[0] -= 32;
return String.valueOf(cs);
}
public static String decodeBase64(String res) {
if (StringUtil.isBlank(res)) {
return null;
}
try {
return new String(Base64.getDecoder().decode(res), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static String removeHtml(String html) {
if (StringUtil.isBlank(html)) {
return null;
}
return html.replaceAll("\\<.*?>", "");
}
public static String realNameTo2(String value) {
if (StringUtil.isBlank(value)) {
return "";
}
if (value.length() > 2) {
return value.substring(value.length() - 2);
}
return value;
}
/**
* fmai 根据基数产生随机5位数
*
* @return
*/
public static String getRandomNum(int count) {
StringBuilder randomNum = new StringBuilder();
int length = NUMBERS.length;
Random random = new Random();
for (int i = 0; i < count; i++) {
randomNum.append(NUMBERS[random.nextInt(length)]);
}
return randomNum.toString();
}
public static boolean in(Integer status, Integer... is) {
if (is == null || is.length <= 0) {
return false;
}
for (Integer i : is) {
if (i.equals(status)) {
return true;
}
}
return false;
}
public static List<Long> strToLongs(String roleIds) {
List<Long> list = new ArrayList<>();
if (StringUtil.isEmpty(roleIds)) {
return list;
}
String[] roleId = roleIds.split(",");
for (String r : roleId) {
list.add(NumberUtil.objToLongDefault(r, -1));
}
return list;
}
public static List<Long> getLongList(String evaluationGroupInfoStr) {
List<Long> longList = new ArrayList<>();
if (StringUtil.isNotBlank(evaluationGroupInfoStr)) {
String[] ids = evaluationGroupInfoStr.split(",");
if (ids != null && ids.length > 0) {
for (String id : ids) {
if (StringUtil.isNotBlank(id)) {
longList.add(NumberUtil.objToLongDefault(id, 0l));
}
}
}
}
return longList;
}
public static List<String> getStringList(String evaluationGroupInfoStr) {
List<String> longList = new ArrayList<>();
if (StringUtil.isNotBlank(evaluationGroupInfoStr)) {
String[] ids = evaluationGroupInfoStr.split(",");
if (ids != null && ids.length > 0) {
for (String id : ids) {
if (StringUtil.isNotBlank(id)) {
longList.add(id);
}
}
}
}
return longList;
}
public static String formateRate(BigDecimal processRate,int multiply) {
if(processRate == null){
return "0 %";
}
processRate = processRate.multiply(new BigDecimal(multiply));
System.out.println(processRate);
DecimalFormat df = new DecimalFormat("0");
df.setRoundingMode(RoundingMode.HALF_UP);
return df.format(processRate)+" %";
}
public static String formateRate(String rate,int multiply) {
if(StringUtil.isEmpty(rate)) {
return "0 %";
}
BigDecimal processRate = NumberUtil.objToBigDecimalDefault(rate, BigDecimal.ZERO).multiply(new BigDecimal(multiply));
System.out.println(processRate);
DecimalFormat df = new DecimalFormat("0");
df.setRoundingMode(RoundingMode.HALF_UP);
return df.format(processRate) + " %";
}
public static void main(String[] args) {
System.out.println(formateRate(new BigDecimal(0.32),100));
}
}