util之String字符串工具类(全量版)
package com.xxx.util; import java.io.PrintWriter; import java.io.StringWriter; import java.security.MessageDigest; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sf.json.JSONArray; import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.jsoup.Jsoup; import org.jsoup.safety.Whitelist; /** * 字符串操作类 * */ public class StringUtil { /** * 对字符串 escape 编码 * * @param src * @return */ public static String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length() * 6); for (i = 0; i < src.length(); i++) { j = src.charAt(i); if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) tmp.append(j); else if (j < 256) { tmp.append("%"); if (j < 16) tmp.append("0"); tmp.append(Integer.toString(j, 16)); } else { tmp.append("%u"); tmp.append(Integer.toString(j, 16)); } } return tmp.toString(); } /** * 根据变量替换模板。 * * @param template * 模板。格式:/temp/{a}/{b} * @param map * 需要替换的变量。 * @return * @throws Exception * String */ public static String replaceVariable(String template, Map<String, String> map) throws Exception { Pattern regex = Pattern.compile("\\{(.*?)\\}"); Matcher regexMatcher = regex.matcher(template); while (regexMatcher.find()) { String key = regexMatcher.group(1); String toReplace = regexMatcher.group(0); String value = (String) map.get(key); if (value != null) template = template.replace(toReplace, value); else throw new Exception("没有找到[" + key + "]对应的变量值,请检查表变量配置!"); } return template; } /** * 对编码的字符串解码 * * @param src * @return */ public static String unescape(String src) { StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length()); int lastPos = 0, pos = 0; char ch; while (lastPos < src.length()) { pos = src.indexOf("%", lastPos); if (pos == lastPos) { if (src.charAt(pos + 1) == 'u') { ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16); tmp.append(ch); lastPos = pos + 6; } else { ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16); tmp.append(ch); lastPos = pos + 3; } } else { if (pos == -1) { tmp.append(src.substring(lastPos)); lastPos = src.length(); } else { tmp.append(src.substring(lastPos, pos)); lastPos = pos; } } } return tmp.toString(); } /** * 判断指定的内容是否存在 * * @param content * 内容 * @param begin * 开始标签 * @param end * 结束标签 * @return */ public static boolean isExist(String content, String begin, String end) { String tmp = content.toLowerCase(); begin = begin.toLowerCase(); end = end.toLowerCase(); int beginIndex = tmp.indexOf(begin); int endIndex = tmp.indexOf(end); if (beginIndex != -1 && endIndex != -1 && beginIndex < endIndex) return true; return false; } /** * 去掉前面的指定字符 * * @param toTrim * @param trimStr * @return */ public static String trimPrefix(String toTrim, String trimStr) { while (toTrim.startsWith(trimStr)) { toTrim = toTrim.substring(trimStr.length()); } return toTrim; } /** * 删除后面指定的字符 * * @param toTrim * @param trimStr * @return */ public static String trimSufffix(String toTrim, String trimStr) { while (toTrim.endsWith(trimStr)) { toTrim = toTrim.substring(0, toTrim.length() - trimStr.length()); } return toTrim; } /** * 删除指定的字符 * * @param toTrim * @param trimStr * @return */ public static String trim(String toTrim, String trimStr) { return trimSufffix(trimPrefix(toTrim, trimStr), trimStr); } /** * 编码html * * @param content * @return */ public static String escapeHtml(String content) { return StringEscapeUtils.escapeHtml(content); } /** * 反编码html * * @param content * @return */ public static String unescapeHtml(String content) { return StringEscapeUtils.unescapeHtml(content); } /** * 判断字符串是否为空 * * @param str * @return */ public static boolean isEmpty(String str) { if (str == null) return true; if (str.trim().equals("")) return true; return false; } /** * 判断字符串非空 * * @param str * @return */ public static boolean isNotEmpty(String str) { return !isEmpty(str); } public static String replaceVariable(String template, String repaceStr) { Pattern regex = Pattern.compile("\\{(.*?)\\}"); Matcher regexMatcher = regex.matcher(template); if (regexMatcher.find()) { String toReplace = regexMatcher.group(0); template = template.replace(toReplace, repaceStr); } return template; } /** * 截取字符串 中文为两个字节,英文为一个字节。 两个英文为一个中文。 * * @param str * @param len * @return */ public static String subString(String str, int len, String chopped) { if (str == null || "".equals(str)) return ""; char[] chars = str.toCharArray(); int cnLen = len * 2; String tmp = ""; boolean isOver = false; int iLen = 0; for (int i = 0; i < chars.length; i++) { int iChar = (int) chars[i]; if (iChar <= 128) iLen = iLen + 1; else iLen = iLen + 2; if (iLen >= cnLen) { isOver = true; break; } tmp += String.valueOf(chars[i]); } if (isOver) { tmp += chopped; } return tmp; } /** * 截取字符串 中文为两个字节,英文为一个字节。 两个英文为一个中文。 * * @param str * @return */ public static String subString(String str) { int len = 25; String tmp = AppConfigUtil.get("titleLen"); String regex = "<(?:(?:/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s/>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'<>])*)/?>))"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); if (matcher.find()) { return str; } else { if (StringUtil.isNotEmpty(tmp)) { len = Integer.parseInt(tmp); } return subString(str, len, "..."); } } /** * 判读输入字符是否是数字 * * @param s * @return */ public static boolean isNumberic(String s) { if (StringUtils.isEmpty(s)) return false; boolean rtn = validByRegex("^[-+]{0,1}\\d*\\.{0,1}\\d+$", s); if (rtn) return true; return validByRegex("^0[x|X][\\da-eA-E]+$", s); } /** * 是否是整数。 * * @param s * @return */ public static boolean isInteger(String s) { boolean rtn = validByRegex("^[-+]{0,1}\\d*$", s); return rtn; } /** * 是否是电子邮箱 * * @param s * @return */ public static boolean isEmail(String s) { boolean rtn = validByRegex("(\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*)*", s); return rtn; } /** * 手机号码 * * @param s * @return */ public static boolean isMobile(String s) { boolean rtn = validByRegex("^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$", s); return rtn; } /** * 电话号码 * * @param * @return */ public static boolean isPhone(String s) { boolean rtn = validByRegex("(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?", s); return rtn; } /** * 邮编 * * @param s * @return */ public static boolean isZip(String s) { boolean rtn = validByRegex("^[0-9]{6}$", s); return rtn; } /** * qq号码 * * @param s * @return */ public static boolean isQq(String s) { boolean rtn = validByRegex("^[1-9]\\d{4,9}$", s); return rtn; } /** * ip地址 * * @param s * @return */ public static boolean isIp(String s) { boolean rtn = validByRegex("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", s); return rtn; } /** * 判断是否中文 * * @param s * @return */ public static boolean isChinese(String s) { boolean rtn = validByRegex("^[\u4e00-\u9fa5]+$", s); return rtn; } /** * 字符和数字 * * @param s * @return */ public static boolean isChrNum(String s) { boolean rtn = validByRegex("^([a-zA-Z0-9]+)$", s); return rtn; } /** * 判断是否是URL * * @param url * @return */ public static boolean isUrl(String url) { return validByRegex("(http://|https://)?([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?", url); } /** * 判断是否json格式 * * @param json * @return */ public static Boolean isJson(String json) { if (isEmpty(json)) return false; try { JSONObject.fromObject(json); return true; } catch (JSONException e) { try { JSONArray.fromObject(json); return true; } catch (JSONException ex) { return false; } } } /** * 使用正则表达式验证。 * * @param regex * @param input * @return */ public static boolean validByRegex(String regex, String input) { Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher regexMatcher = p.matcher(input); return regexMatcher.find(); } /** * 判断某个字符串是否为数字 * * @param str * @return */ public static boolean isNumeric(String str) { for (int i = str.length(); --i >= 0;) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } /** * 把字符串的第一个字母转为大写 * * @param newStr * @return */ public static String makeFirstLetterUpperCase(String newStr) { if (newStr.length() == 0) return newStr; char[] oneChar = new char[1]; oneChar[0] = newStr.charAt(0); String firstChar = new String(oneChar); return (firstChar.toUpperCase() + newStr.substring(1)); } /** * 把字符串的第一字每转为小写 * * @param newStr * @return */ public static String makeFirstLetterLowerCase(String newStr) { if (newStr.length() == 0) return newStr; char[] oneChar = new char[1]; oneChar[0] = newStr.charAt(0); String firstChar = new String(oneChar); return (firstChar.toLowerCase() + newStr.substring(1)); } /** * 格式化带参数的字符串,如 /param/detail.ht?a={0}&b={1} * * @param message * @param args * @return */ public static String formatParamMsg(String message, Object... args) { for (int i = 0; i < args.length; i++) { message = message.replace("{" + i + "}", args[i].toString()); } return message; } /** * 格式化如下字符串 http://www.bac.com?a=${a}&b=${b} * * @param message * @param params */ public static String formatParamMsg(String message, Map<String, ?> params) { if (params == null) return message; Iterator<String> keyIts = params.keySet().iterator(); while (keyIts.hasNext()) { String key = keyIts.next(); Object val = params.get(key); if (val != null) { message = message.replace("${" + key + "}", val.toString()); } } return message; } /** * 简单的字符串格式化,性能较好。支持不多于10个占位符,从%1开始计算,数目可变。参数类型可以是字符串、Integer、Object, 甚至int等基本类型 、以及null,但只是简单的调用toString(),较复杂的情况用String.format()。每个参数可以在表达式出现多次。 * * @param msgWithFormat * @param autoQuote * @param args * @return */ public static StringBuilder formatMsg(CharSequence msgWithFormat, boolean autoQuote, Object... args) { int argsLen = args.length; boolean markFound = false; StringBuilder sb = new StringBuilder(msgWithFormat); if (argsLen > 0) { for (int i = 0; i < argsLen; i++) { String flag = "%" + (i + 1); int idx = sb.indexOf(flag); // 支持多次出现、替换的代码 while (idx >= 0) { markFound = true; sb.replace(idx, idx + 2, toString(args[i], autoQuote)); idx = sb.indexOf(flag); } } if (args[argsLen - 1] instanceof Throwable) { StringWriter sw = new StringWriter(); ((Throwable) args[argsLen - 1]).printStackTrace(new PrintWriter(sw)); sb.append("\n").append(sw.toString()); } else if (argsLen == 1 && !markFound) { sb.append(args[argsLen - 1].toString()); } } return sb; } public static StringBuilder formatMsg(String msgWithFormat, Object... args) { return formatMsg(new StringBuilder(msgWithFormat), true, args); } public static String toString(Object obj, boolean autoQuote) { StringBuilder sb = new StringBuilder(); if (obj == null) { sb.append("NULL"); } else { if (obj instanceof Object[]) { for (int i = 0; i < ((Object[]) obj).length; i++) { sb.append(((Object[]) obj)[i]).append(", "); } if (sb.length() > 0) { sb.delete(sb.length() - 2, sb.length()); } } else { sb.append(obj.toString()); } } if (autoQuote && sb.length() > 0 && !((sb.charAt(0) == '[' && sb.charAt(sb.length() - 1) == ']') || (sb.charAt(0) == '{' && sb.charAt(sb.length() - 1) == '}'))) { sb.insert(0, "[").append("]"); } return sb.toString(); } public static String returnSpace(String str) { String space = ""; if (!str.isEmpty()) { String path[] = str.split("\\."); for (int i = 0; i < path.length - 1; i++) { space += "  "; } } return space; } /** * 输出明文按sha-256加密后的密文 * * @param inputStr * 明文 * @return */ public static synchronized String encryptSha256(String inputStr) { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte digest[] = md.digest(inputStr.getBytes("UTF-8")); return new String(Base64.encodeBase64(digest)); } catch (Exception e) { return null; } } public static synchronized String encryptMd5(String inputStr) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(inputStr.getBytes()); byte[] digest = md.digest(); StringBuffer sb = new StringBuffer(); for (byte b : digest) { sb.append(Integer.toHexString((int) (b & 0xff))); } return sb.toString(); } catch (Exception e) { return null; } } /** * 把字符串List转成带,的字符串 * * @param arr * @return 返回字符串,格式如1,2,3 */ public static String getArrayAsString(List<String> arr) { if (arr == null || arr.size() == 0) return ""; StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.size(); i++) { if (i > 0) sb.append(","); sb.append(arr.get(i)); } return sb.toString(); } /** * 把字符串数组转成带,的字符串 * * @param arr * @return 返回字符串,格式如1#2#3 */ public static String getArrayAsString(String[] arr) { if (arr == null || arr.length == 0) return ""; StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { if (i > 0) sb.append("#"); sb.append(arr[i]); } return sb.toString(); } /** * 把Set转成带,的字符串 * * @param Set * @return 返回字符串,格式如1,2,3 */ public static String getSetAsString(Set<?> set) { if (set == null || set.size() == 0) return ""; StringBuffer sb = new StringBuffer(); int i = 0; Iterator<?> it = set.iterator(); while (it.hasNext()) { if (i++ > 0) sb.append(","); sb.append(it.next().toString()); } return sb.toString(); } /** * 将人民币转成大写。 * * @param amount * @return */ public static String hangeToBig(double value) { char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示 char[] vunit = { '万', '亿' }; // 段名表示 char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示 String zheng = "整"; String jiao = "角"; String fen = "分"; char yuan = '圆'; long midVal = (long) (value * 100); // 转化成整形 String valStr = String.valueOf(midVal); // 转化成字符串 String head = valStr.substring(0, valStr.length() - 2); // 取整数部分 int len = head.length(); if (len > 12) return "值过大"; String rail = valStr.substring(valStr.length() - 2); // 取小数部分 String prefix = ""; // 整数部分转化的结果 String suffix = ""; // 小数部分转化的结果 // 处理小数点后面的数 if (rail.equals("00")) { // 如果小数部分为0 suffix = zheng; } else { suffix = digit[rail.charAt(0) - '0'] + jiao + digit[rail.charAt(1) - '0'] + fen; // 否则把角分转化出来 } // 处理小数点前面的数 char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组 char zero = '0'; // 标志'0'表示出现过0 byte zeroSerNum = 0; // 连续出现0的次数 for (int i = 0; i < chDig.length; i++) { // 循环处理每个数字 int idx = (chDig.length - i - 1) % 4; // 取段内位置 int vidx = (chDig.length - i - 1) / 4; // 取段位置 if (chDig[i] == '0') { // 如果当前字符是0 zeroSerNum++; // 连续0次数递增 if (zero == '0') { // 标志 zero = digit[0]; } else if (idx == 0 && vidx > 0 && zeroSerNum < 4) { prefix += vunit[vidx - 1]; zero = '0'; } continue; } zeroSerNum = 0; // 连续0次数清零 if (zero != '0') { // 如果标志不为0,则加上,例如万,亿什么的 prefix += zero; zero = '0'; } prefix += digit[chDig[i] - '0']; // 转化该数字表示 if (idx > 0) prefix += hunit[idx - 1]; if (idx == 0 && vidx > 0) { prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿 } } if (prefix.length() > 0) prefix += yuan; // 如果整数部分存在,则有圆的字样 return prefix + suffix; // 返回正确表示 } /** * 替换json特殊字符转码 * * @param str * @return */ public static String jsonUnescape(String str) { return str.replace(""", "\"").replace("&nuot;", "\n"); } /** * HTML实体编码转成普通的编码 * * @param dataStr * @return */ public static String htmlEntityToString(String dataStr) { dataStr = dataStr.replace("'", "'").replace(""", "\"").replace(">", ">").replace("<", "<").replace("&", "&"); int start = 0; int end = 0; final StringBuffer buffer = new StringBuffer(); while (start > -1) { int system = 10;// 进制 if (start == 0) { int t = dataStr.indexOf("&#"); if (start != t) { start = t; } if (start > 0) { buffer.append(dataStr.substring(0, start)); } } end = dataStr.indexOf(";", start + 2); String charStr = ""; if (end != -1) { charStr = dataStr.substring(start + 2, end); // 判断进制 char s = charStr.charAt(0); if (s == 'x' || s == 'X') { system = 16; charStr = charStr.substring(1); } } // 转换 try { if (isNotEmpty(charStr)) { char letter = (char) Integer.parseInt(charStr, system); buffer.append(new Character(letter).toString()); } } catch (NumberFormatException e) { // e.printStackTrace(); } // 处理当前unicode字符到下一个unicode字符之间的非unicode字符 start = dataStr.indexOf("&#", end); if (start - end > 1) { buffer.append(dataStr.substring(end + 1, start)); } // 处理最后面的非unicode字符 if (start == -1) { int length = dataStr.length(); if (end + 1 != length) { buffer.append(dataStr.substring(end + 1, length)); } } } return buffer.toString(); } /** * 把String转成html实体字符 * * @param str * @return */ public static String stringToHtmlEntity(String str) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); switch (c) { case 0x0A: sb.append(c); break; case '<': sb.append("<"); break; case '>': sb.append(">"); break; case '&': sb.append("&"); break; case '\'': sb.append("'"); break; case '"': sb.append("""); break; default: if ((c < ' ') || (c > 0x7E)) { sb.append("&#x"); sb.append(Integer.toString(c, 16)); sb.append(';'); } else { sb.append(c); } } } return sb.toString(); } /** * 字符串 编码转换 * * @param str * 字符串 * @param from * 原來的編碼 * @param to * 轉換后的編碼 * @return */ public static String encodingString(String str, String from, String to) { String result = str; try { result = new String(str.getBytes(from), to); } catch (Exception e) { result = str; } return result; } /** * 将字符串数字转成千分位显示。 */ public static String comdify(String value) { DecimalFormat df = null; if (value.indexOf(".") > 0) { int i = value.length() - value.indexOf(".") - 1; switch (i) { case 0: df = new DecimalFormat("###,##0"); break; case 1: df = new DecimalFormat("###,##0.0"); break; case 2: df = new DecimalFormat("###,##0.00"); break; case 3: df = new DecimalFormat("###,##0.000"); break; case 4: df = new DecimalFormat("###,##0.0000"); break; default: df = new DecimalFormat("###,##0.00000"); break; } } else { df = new DecimalFormat("###,##0"); } double number = 0.0; try { number = Double.parseDouble(value); } catch (Exception e) { number = 0.0; } return df.format(number); } /** * 转换换行符(不删除空格) * * @param arg * 要转换的字符串 * @param flag * 标志是正向转换(true),还是逆向转换(false) * @return */ public static String convertScriptLine(String arg, Boolean flag) { if (StringUtils.isEmpty(arg)) return arg; String origStr = "\n", targStr = "/n"; if (!flag) { origStr = "/n"; targStr = "\n"; } String[] args = arg.split(origStr); StringBuffer sb = new StringBuffer(); for (int i = 0; i < args.length; i++) { sb.append(args[i]); if (args.length != i + 1) sb.append(targStr); } return sb.toString(); } /** * 转换换行符(删除空格) * * @param arg * 要转换的字符串 * @param flag * 标志是正向转换(true),还是逆向转换(false) * @return */ public static String convertLine(String arg, Boolean flag) { if (StringUtils.isEmpty(arg)) return arg; String origStr = "\n", targStr = "/n"; if (!flag) { origStr = "/n"; targStr = "\n"; } String[] args = arg.split(origStr); StringBuffer sb = new StringBuffer(); for (int i = 0; i < args.length; i++) { sb.append(StringUtils.deleteWhitespace(args[i])); if (args.length != i + 1) sb.append(targStr); } return sb.toString(); } /** * 转换换行符 * * @param arg * 要转换的字符串 * @return */ public static String deleteWhitespaceLine(String arg) { if (StringUtils.isEmpty(arg)) return arg; String origStr = "\n"; String[] args = arg.split(origStr); StringBuffer sb = new StringBuffer(); for (int i = 0; i < args.length; i++) { sb.append(StringUtils.deleteWhitespace(args[i])); if (args.length != i + 1) sb.append(origStr); } return sb.toString(); } /** * 格式化换行,页面展示 * * @param arg * @return */ public static String parseText(String arg) { if (StringUtils.isEmpty(arg)) return arg; String[] args = arg.split("\n"); StringBuffer sb = new StringBuffer(); for (int i = 0; i < args.length; i++) { sb.append(args[i]); if (args.length != i + 1) sb.append("</br>"); } return sb.toString(); } /** * 去掉不可见字符。 * * @param str * @return */ public static String replaceNotVisable(String str) { char[] ary = str.toCharArray(); List<Character> list = new ArrayList<Character>(); for (int i = 0; i < ary.length; i++) { int c = (int) ary[i]; if (!isViable(c)) continue; list.add((char) c); } Object[] aryc = (Object[]) list.toArray(); char[] arycc = new char[aryc.length]; for (int i = 0; i < aryc.length; i++) { arycc[i] = (Character) aryc[i]; } String out = new String(arycc); return out; } private static boolean isViable(int i) { if (i == 0 || i == 13 || (i >= 9 && i <= 10) || (i >= 11 && i <= 12) || (i >= 28 && i <= 126) || (i >= 19968 && i <= 40869)) { return true; } return false; } /** * 替换美元符号。 * * @param toReplace * @param replace * @param replaceBy * @return */ public static String replaceAll(String toReplace, String replace, String replaceBy) { replaceBy = replaceBy.replaceAll("\\\\", "\"); replaceBy = replaceBy.replaceAll("\\$", "\\\\\\$").replaceAll("\"", """); return toReplace.replaceAll(replace, replaceBy); } public static String stringFormat2Json(String json) { StringBuilder sb = new StringBuilder(); int size = json.length(); for (int i = 0; i < size; i++) { char c = json.charAt(i); switch (c) { case '\b': sb.append("\\b"); break; case '\f': sb.append("\\f"); break; case '\n': sb.append("\\n"); break; case '\r': sb.append("\\r"); break; case '\t': sb.append("\\t"); break; default: sb.append(c); break; } } return sb.toString(); } /** * 根据格式取得数据显示。 * * @param value * 需要处理的值 * @param isShowComdify * 是否千分位显示 * @param decimalValue * 保留小数的位数 * @param coinValue * 货币显示 * @return */ public static String getNumber(Object value, Object isShowComdify, Object decimalValue, Object coinValue) { if (value == null) return ""; String val = value.toString(); if (isShowComdify != null) { int result = 0; // 兼容旧版本做判断 String temp = isShowComdify.toString(); boolean isInteger = temp.matches("^[0-9]*$"); if (isInteger) { result = Short.parseShort(temp); } else { if ("true".equals(temp)) { result = 1; } else if ("false".equals(temp)) { result = 0; } } Double douvalue = Double.parseDouble(val); DecimalFormat df = new DecimalFormat(""); val = df.format(douvalue); if (result != 1) { val = val.replace(",", ""); } } // 位数 if (decimalValue != null) { int len = Integer.parseInt(decimalValue.toString()); // 小数位 为0 if (len > 0) { int idx = val.indexOf("."); if (idx == -1) { val = val + "." + getZeroLen(len); } else { String intStr = val.substring(0, val.indexOf(".")); String decimal = val.substring(val.indexOf(".") + 1); if (decimal.length() > len) { Double douvalue = Double.parseDouble(val.replace(",", "")); DecimalFormat df = new DecimalFormat(""); df.setMaximumFractionDigits(len); String tmp = df.format(douvalue); if (tmp.indexOf(".") == -1) { val = intStr + "." + getZeroLen(len); } else { decimal = tmp.substring(tmp.indexOf(".") + 1); val = intStr + "." + decimal; } } else if (decimal.length() < len) { int tmp = len - decimal.length(); val += getZeroLen(tmp); } } } } // 判断是否是以 . 开头的数字,如果是则在前面添加 0 boolean foundPoint = val.matches("^\\.\\d+"); if (foundPoint) { val = 0 + val; } if (coinValue != null) { val = coinValue.toString() + val; } return val; } private static String getZeroLen(int len) { String str = ""; for (int i = 0; i < len; i++) { str += "0"; } return str; } /** * 去除html标签 * * <pre> * StringUtil.removeHTMLTag(null, "<span style=\"color:#ff0000\"><span style=\"font-size:16px\">330<20and ss>sss<span style=\"background-color:#ffff00\">"); * </pre> * * @param htmlStr * @return */ public static String removeHTMLTag(String htmlStr) { if (StringUtil.isEmpty(htmlStr)) return ""; htmlStr = Jsoup.clean(htmlStr, Whitelist.none()); htmlStr = htmlEntityToString(htmlStr); return htmlStr.trim(); // 返回文本字符串 } /** * 判定的逗号(,)分隔字符串是否包括指定的字符。 * * @param str * @param searchStr * @return */ public static boolean contain(String str, String searchStr) { return contain(str, searchStr, ",", true); } /** * 判定的指定分隔符的字符串是否包括指定的字符。 * * @param str * @param searchStr * @return */ public static boolean contain(String str, String searchStr, String argumentSeparator, boolean isIgnoreCase) { if (isEmpty(str)) return false; if (isEmpty(argumentSeparator)) argumentSeparator = ","; String[] aryStr = str.split(argumentSeparator); return contain(aryStr, searchStr, isIgnoreCase); } /** * 判定的字符串数组是否包括指定的字符。 * * @param ids * @param curId * @return */ public static boolean contain(String[] aryStr, String searchStr, boolean isIgnoreCase) { if (BeanUtils.isEmpty(aryStr)) return false; for (String str : aryStr) { if (isIgnoreCase) { if (str.equalsIgnoreCase(searchStr)) return true; } else { if (str.equals(searchStr)) return true; } } return false; } /** * 获取字符串中某种字符的个数 * * @param ids * @param curId * @return */ public static int getCount(String str, int type) { int len = str.length(); int chineseCount = 0; // 中文字符个数 int letterCount = 0; // 英文字母个数 int blankCount = 0; // 空格个数 int numCount = 0; // 数字个数 int otherCount = 0; // 其他字符个数 for (int i = 0; i < len; i++) { char tem = str.charAt(i); Character.UnicodeBlock ub = Character.UnicodeBlock.of(tem); if ((tem > 'A' && tem < 'Z') || (tem > 'a' && tem < 'z'))// 英文字母 letterCount++; else if (tem == ' ') // 空格 blankCount++; else if (tem > '0' && tem < '9')// 数字 numCount++; else if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) { chineseCount++; } else { // 其他 otherCount++; } } switch (type) { case -1: return chineseCount; // 中文字符个数: case 0: return letterCount; // 英文字母个数: case 1: return blankCount; // 空格个数: case 2: return numCount; // 数字个数: case 3: return otherCount; // 其他字符个数: } return otherCount; } // 用于获取字符串的总的像素单位 public static int getTotalSize(String str) { int chineseCount = getCount(str, -1); int letterCount = getCount(str, 0); int blankCount = getCount(str, 1); int numCount = getCount(str, 2); int otherCount = getCount(str, 3); return chineseCount + (letterCount + numCount) / 3 + blankCount / 4 + otherCount * 3 / 4; } /** * 获取拼接的url * * @param url * @param params * 参数 * @return */ public static String getUrl(String url, String params) { if (isEmpty(url)) return url; if (url.indexOf("?") > 0) { if (isNotEmpty(params)) url += "&" + params; else url += "?" + params; } else if (isNotEmpty(params)) url += "?" + params; return url; } // public static void main(String[] args) { // String s = "<span style=\"color:#ff0000\"><span style=\"font-size:16px\">330<20and ss>sss<span style=\"background-color:#ffff00\">"; // s = removeHTMLTag(s); // logger.info(s); // // // String s2 = convertLine(s1,false); // // logger.info(s2); // // String // // str="${scriptImpl.getStartUserPos(startUser)==\"部门经理\"}"; // // logger.info(htmlEntityToString(str)); // } }