public class StringUtils extends org.apache.commons.lang3.StringUtils { public static final String[] BLANK=new String[]{""," "," "," "," "}; /** * 合并字符串数组为一个串 * * @param src String[] 字符串数组 * @param delimiter 隔开字符 * @return String */ public static String merge(String[] src, String delimiter) { StringBuffer newSrc = new StringBuffer(); for (int i = 0; i < src.length; i++) { if (i < src.length - 1) { newSrc.append(src[i]).append(delimiter); } else { newSrc.append(src[i]); } } return newSrc.toString(); } /** * 分解字符串 * * @param str String * @param sect int 分解的段数 * @param len int 每段的字符长度 * @return String[] * @throws Exception */ static public String[] split(String str, int sect, int len) throws Exception { String[] result = new String[sect]; int j = 0; for (j = 0; j < sect; j++) { result[j] = ""; } for (j = 0; j < sect; j++) { if (str.length() < len * j) { break; } else if (str.length() < len * (j + 1)) { result[j] = str.substring(len * j, str.length()); } else { result[j] = str.substring(len * j, len * (j + 1)); } } return result; } /** * 对整个url进行编码转换 * * @param srcStr url串 * @param encoding 编码 * @return String */ public static String URLEncode(String srcStr, String encoding) { String[] arrayUrl = srcStr.split("?"); if (arrayUrl.length <= 1) { return srcStr; } String qryStr = arrayUrl[1]; String[] arrayQryStr = qryStr.split("&"); StringBuffer newQryStr = new StringBuffer(120); StringBuffer tmp = new StringBuffer(20); String param; for (int i = 0; i < arrayQryStr.length; i++) { param = arrayQryStr[i]; String[] arrayParam = param.split("="); if (arrayParam.length > 1) { try { arrayParam[1] = URLEncoder.encode(arrayParam[1], encoding); } catch (Exception e) { e.printStackTrace(); } tmp.append(arrayParam[0]).append("=").append(arrayParam[1]); arrayQryStr[i] = tmp.toString(); } else { tmp.append(arrayParam[0]).append("="); arrayQryStr[i] = tmp.toString(); } newQryStr.append(arrayQryStr[i]).append("&"); } tmp = new StringBuffer(150); tmp.append(arrayUrl[0]).append("?").append(newQryStr.toString()); return tmp.toString(); } /** * 用 newString 替换 line 中的所有的 OldString。 不支持正则表达式 * * @param line 原字符串 * @param oldString 被替换的字符串 * @param newString 新的要替换oldString的字符串 * @return 返回所有oldString都被newString替换的字符串 */ public static final String replace(String line, String oldString, String newString) { // 如果line是null,直接返回 if (line == null) { return null; } int i = 0; // 如果在line中确实存在oldString那么将进行以下的替换 if ((i = line.indexOf(oldString, i)) >= 0) { char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); i += oLength; int j = i; while ((i = line.indexOf(oldString, i)) > 0) { buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } buf.append(line2, j, line2.length - j); return buf.toString(); } // 如果在line中没有oldString 返回line return line; } /** * 用 newString 替换 line 中的所有的 OldString count返回被替换的数目 * * @param line 原字符串 * @param oldString 被替换的字符串 * @param newString 新的要替换oldString的字符串 * @return 返回所有oldString都被newString替换的字符串 */ public static final String replace(String line, String oldString, String newString, int[] count) { if (line == null) { return null; } int i = 0; if ((i = line.indexOf(oldString, i)) >= 0) { int counter = 0; counter++; char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); i += oLength; int j = i; while ((i = line.indexOf(oldString, i)) > 0) { counter++; buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } buf.append(line2, j, line2.length - j); count[0] = counter; return buf.toString(); } return line; } /** * 做不区分大小写的模式匹配,并用newString 来替换 oldString * * @param line 原字符串 * @param oldString 被替换的字符串 * @param newString 新的要替换oldString的字符串 * @return 返回所有oldString都被newString替换的字符串 */ public static final String replaceIgnoreCase(String line, String oldString, String newString) { // 如果line是null,直接返回 if (line == null) { return null; } String lcLine = line.toLowerCase(); String lcOldString = oldString.toLowerCase(); int i = 0; if ((i = lcLine.indexOf(lcOldString, i)) >= 0) { char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); i += oLength; int j = i; while ((i = lcLine.indexOf(lcOldString, i)) > 0) { buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } buf.append(line2, j, line2.length - j); return buf.toString(); } return line; } /** * 从数组中得到字符串的位置 * * @param s 要查询的字符串 * @param args 待查的数组 * @return s的位置,没有找到就是-1 */ public static int getStrIndex(String s, String args[]) { int length = args.length; for (int i = 0; i < length; i++) { if (args[i].equals(s)) { return i; } } return -1; } /** * 判断 如果输入的字符为null或者'null',输出空字符串"" * * @param src * @return */ public static String nullToEmpty(String src) { if (src == null || src.equalsIgnoreCase("NULL")) { return ""; } return src; } /** * 将下划线连接的String替换为驼峰风格 * * @param s * @return */ public static String toCamelCasing(String s) { if (s == null) { return s; } StringBuffer buffer = new StringBuffer(); for (int i = 0; i < s.length() - 1; i++) { char ch = s.charAt(i); if (ch != '_') { buffer.append(ch); } else { char nextChar = s.charAt(i + 1); if (nextChar != '_') { // if (buffer.toString().length() < 2) { // buffer.append(Character.toLowerCase(nextChar)); // } else { buffer.append(Character.toUpperCase(nextChar)); // } i++; } } } char lastChar = s.charAt(s.length() - 1); if (lastChar != '_') { buffer.append(lastChar); } return buffer.toString(); } /** * 将驼峰结构的字符串转换为下划线连接的形式 * * @param s * @return */ public static String toUnderLine(String s) { if (s == null) { return s; } StringBuffer buffer = new StringBuffer(); for (int i = 0; i < s.length() - 1; i++) { char ch = Character.toLowerCase(s.charAt(i)); char nextChar = s.charAt(i + 1); if (Character.isUpperCase(nextChar)) { buffer.append(ch).append('_'); } else { buffer.append(ch); } } char lastChar = s.charAt(s.length() - 1); buffer.append(Character.toLowerCase(lastChar)); return buffer.toString(); } /** * 将首字母小写 * * @param s * @return */ public static String lowerFirstChar(String s) { if (s == null || s.trim().equals("")) { return null; } StringBuffer buffer = new StringBuffer(); buffer.append(Character.toLowerCase(s.charAt(0))) .append(s.substring(1)); return buffer.toString(); } /** * 将首字母大写 * * @param s * @return */ public static String upperFirstChar(String s) { if (s == null || s.trim().equals("")) { return null; } StringBuffer buffer = new StringBuffer(); buffer.append(Character.toUpperCase(s.charAt(0))) .append(s.substring(1)); return buffer.toString(); } /** * 拼接某属性get 方法 * * @param isBooleanType 属性是否为boolean型 * @return */ public static String pareGetName(String fieldName, Boolean isBooleanType) { String str = StringUtils.upperFirstChar(fieldName); if (str == null) { return null; } if (isBooleanType) { return "is" + str; } else { return "get" + str; } } /** * 拼接某属性set 方法 * * @return */ public static String pareSetName(String fieldName) { String str = StringUtils.upperFirstChar(fieldName); if (str == null) { return null; } String pro = "set" + str; return pro; } /** * 方法说明:判断字符串是否为空 * * @param paramString * @return */ public static boolean nullOrBlank(String paramString) { return (paramString == null) || (paramString.trim().equals("")); } /** * 方法说明:判断字符串是否为空 * List * * @return */ public static boolean notNullOrBlankList(List list) { if (list == null || list.size() == 0) { return false; } return true; } /** * 方法说明:字符串为空时给默认值 * * @param str * @param defaultValue * @return */ public static String strNvl(String str, String defaultValue) { if (nullOrBlank(str)) { return defaultValue; } return str; } /** * 方法说明:字符串为空时给默认值 * * @param strObj * @param defaultValue * @return */ public static String strObjNvl(Object strObj, String defaultValue) { String str = null; if (strObj != null) { str = strObj.toString(); } return strNvl(str, defaultValue); } /** * 方法说明:获取第N个a字符后面的所有字符 * <p> * <p> * Author: 高宝阳 Create Date: May 5, 2016 6:04:10 PM History: May 5, 2016 * 6:04:10 PM Administrator Created. * * @param sChar * @param n * @return */ public static String getNCharAfter(String sInput, String sChar, int n) { // 这里是获取sChar符号的位置 String str = null; int m = 1; int i = 0; while (sInput.indexOf(sChar, i) >= 0) { i = sInput.indexOf(sChar, i) + 1; if (n == m) { str = sInput.substring(i, sInput.length()); break; } m = m + 1; } return str; } /** * 根据传入的字符串判断将来的数组长度,用于系统参数的解析 * * @param sInput 字符串 * @return * @throws Exception */ public static int getArrLen(String sInput) throws Exception { int len = 0; int i = 0; while (sInput.indexOf("$", i) > 0) { i = sInput.indexOf("$", i) + 1; len = len + 1; } return len; } /** * 字符串解释成数组 * * @param sInput 字符串格式:例如:w$m$n$o$p$ w: 位数;m、n、o、p分别为字符串;如实际的例子:4$122$+$01$1$ * @return * @throws Exception */ public static String[] stringParse(String sInput) throws Exception { String[] sRet = null; try { int len = getArrLen(sInput); int m = -1; sRet = new String[len]; for (int j = 0; j < len; j++) { // 数组 sRet[j] = sInput.substring(m + 1, sInput.indexOf("$", m + 1)); m = sInput.indexOf("$", m + 1); } } catch (Exception e) { System.out.println(e.getMessage()); throw new Exception(e.getMessage()); } return sRet; } /** * replaceBlank * * @param in * @return * @description replaceBlank */ public static String replaceBlank(String in) { Pattern p = Pattern.compile("\s*| | | "); Matcher m = p.matcher(in); String after = m.replaceAll(""); return after; } /** * 删除起始字符 * * @param str * @return * @author xxj 2017年4月27日 */ public static String trimStart(String str, String trim) { if (str == null) { return null; } return str.replaceAll("^(" + trim + ")+", ""); } /** * 删除末尾字符 * * @param str * @return * @author xxj 2017年4月27日 */ public static String trimEnd(String str, String trim) { if (str == null) return null; return str.replaceAll("(" + trim + ")+$", ""); } public static Object nullToDefault(Object obj, Object def) { if (obj == null) { return def; } return obj; } private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分"; private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖"; private static final double MAX_VALUE = 9999999999999.99D; public static String changeMoney(double v) { if (v < 0 || v > MAX_VALUE) { return "参数非法!"; } long l = Math.round(v * 100); if (l == 0) { return "零元整"; } String strValue = l + ""; // i用来控制数 int i = 0; // j用来控制单位 int j = UNIT.length() - strValue.length(); String rs = ""; boolean isZero = false; for (; i < strValue.length(); i++, j++) { char ch = strValue.charAt(i); if (ch == '0') { isZero = true; if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万' || UNIT.charAt(j) == '元') { rs = rs + UNIT.charAt(j); isZero = false; } } else { if (isZero) { rs = rs + "零"; isZero = false; } rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j); } } if (!rs.endsWith("分")) { rs = rs + "整"; } rs = rs.replaceAll("亿万", "亿"); return rs; } public static boolean isBlank(String str) { if (str == null || "".equals(str.trim())) { return true; } else { return false; } } public static boolean isNotBlank(String str) { if (str != null && !"".equals(str.trim())) { return true; } else { return false; } } public static String isGoodPat(String patNo) { patNo = patNo.replaceFirst("[a-zA-Z]*", "").replace(".", "").replace(" ", ""); if (!patNo.substring(0, patNo.length() - 1).matches("[0-9]*$") || (patNo.length() != 13 && patNo.length() != 7)) { return null; } return patNo; } /** * 更具专利号判断专利类型 * 一定要是中国13位专利 * @param patNo * @return */ public static String getPatType(String patNo) { if (StringUtils.isEmpty(patNo) || patNo.length() <= 5) return null; String patType = patNo.substring(4, 5); if ("8".equals(patType)) patType = "1"; if ("9".equals(patType)) patType = "2"; return patType; } public static void main(String args[]) { System.out.print(isGoodPat("20171141704x")); } }