/** * Copyright 2016 benjobs * <p> * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.opencron.common.utils; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public abstract class StringUtils { public static final String SEARCH_SEPERATOR = "[ ,;| ]"; public static boolean hasText(String str) { return org.springframework.util.StringUtils.hasText(str); } public static String joinString(Object[] arrays, String separator) { return joinString(Arrays.asList(arrays), separator); } public static String joinString(Collection<?> collection, String separator) { AssertUtils.notEmpty(collection, "joinString arguments collection and separator can not be null"); StringBuffer collStr = new StringBuffer(); for (Object o : collection) { collStr.append(o).append(separator); } return collStr.substring(0, collStr.length() - separator.length()); } public static String joinString(Object[] arrays) { return joinString(arrays, ","); } public static String joinString(Collection<?> collection) { return joinString(collection, ","); } /** *将字符串转换成String[] * @param str 要转换的目标字符串 * @return */ public static String[] stringToArray(String str) { return stringToArray(str, null, 0); } /** *将字符串转换成String[] * @param str 要转换的目标字符串 * @param limit 要转换的目标字符串 * @return */ public static String[] stringToArray(String str, int limit) { return stringToArray(str, null, limit); } /** *将字符串转换成String[] * @param str 要转换的目标字符串 * @param split 对字符串截取的分隔符 * @return */ public static String[] stringToArray(String str, String split) { return stringToArray(str, split, 0); } /** *将字符串转换成String[] * @param str 要转换的目标字符串 * @param split 对字符串截取的分隔符 * @param limit 长度 * @return */ public static String[] stringToArray(String str, String split, int limit) { List<String> list = stringToList(str, split, limit); if (list == null) { return null; } return list.toArray(new String[0]); } /** *将字符串转换成List<String> * @param str 要转换的目标字符串 * @return */ public static List<String> stringToList(String str) { return stringToList(str, null, 0); } /** *将字符串转换成List<String> * @param str 要转换的目标字符串 * @param limit 对字符串截取的分隔符 * @return */ public static List<String> stringToList(String str, int limit) { return stringToList(str, null, limit); } /** *将字符串转换成List<String> * @param str 要转换的目标字符串 * @param split 长度 * @return */ public static List<String> stringToList(String str, String split) { return stringToList(str, split, 0); } /** * 转换字符串成list * * @param str 字符串 * @param split 分隔符 * @param limit 长度 * @return */ public static List<String> stringToList(String str, String split, int limit) { if (str == null) { return null; } String[] ret = null; if (split == null) { split = SEARCH_SEPERATOR; } ret = str.split(split, limit); if (ret == null) { return null; } List<String> list = new ArrayList<String>(); for (String aRet : ret) { String s = aRet; if (s == null) { continue; } s = s.trim(); if (!"".equals(s)) { list.add(s); } } return list; } /** * 转换字符串为int 失败时返回默认值 -1 * * @param str * @return */ public static int parseInt(String str) { return parseInt(str, -1); } /** * 转换字符串为int 失败时返回默认值 defaultValue * * @param str * @param defaultValue * @return */ public static int parseInt(String str, int defaultValue) { if (str == null || "".equals(str.trim())) { return defaultValue; } int num = 0; try { num = Integer.parseInt(str); } catch (Exception e) { num = defaultValue; } return num; } /** * 转换字符串为long类型,如果转换失败,则返回默认值 -1 * @param str * 字符串 * @return */ public static long parseLong(String str) { return parseLong(str, -1); } /** * 转换字符串为long类型,如果转换失败,则返回默认值 defaultValue * * @param str * 字符串 * @param defaultValue * 默认值 * @return */ public static long parseLong(String str, long defaultValue) { if (str == null || "".equals(str.trim())) { return defaultValue; } long num = 0; try { num = Long.parseLong(str); } catch (Exception e) { num = defaultValue; } return num; } /** * 判断字符串是否为null或者为"" * * @param str * @return */ public static boolean isNullString(String str) { if (str == null || "".equals(str.trim())) { return true; } return false; } public static boolean isNotNullString(String str) { return !isNullString(str); } public static String checkString(String str, String defaultValue) { if (str == null || "".equals(str.trim())) { return defaultValue; } return str; } public static String objectToString(Object o) { if (o == null) { return ""; } if ("".equals(o)) { return ""; } return o.toString(); } /** * 过滤字符串内的所有script标签 * * @param htmlStr * @return writer:<a href="mailto:benjobs@qq.com">benjobs</a> 2012.2.1 */ public static String escapeJavaScript(String htmlStr) { if (htmlStr == null || "".equals(htmlStr)) { return ""; } String regEx_script = "<script[^>]*?>[\\s\\S]*?</script>"; // 定义script的正则表达式 Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); Matcher m_script = p_script.matcher(htmlStr); htmlStr = m_script.replaceAll(""); // 过滤script标签 return htmlStr.trim(); // 返回文本字符串 } /** * 过滤字符串内的所有html标签 * * @param htmlStr * @return writer:<a href="mailto:benjobs@qq.com">benjobs</a> 2012.2.1 */ public static String escapeHtml(String htmlStr) { if (htmlStr == null || "".equals(htmlStr)) { return ""; } String regEx_script = "<script[^>]*?>[\\s\\S]*?</script>"; // 定义script的正则表达式 String regEx_style = "<style[^>]*?>[\\s\\S]*?</style>"; // 定义style的正则表达式 String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); Matcher m_script = p_script.matcher(htmlStr); htmlStr = m_script.replaceAll(""); // 过滤script标签 Pattern p_style = Pattern .compile(regEx_style, Pattern.CASE_INSENSITIVE); Matcher m_style = p_style.matcher(htmlStr); htmlStr = m_style.replaceAll(""); // 过滤style标签 Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); Matcher m_html = p_html.matcher(htmlStr); htmlStr = m_html.replaceAll(""); // 过滤html标签 return htmlStr.trim(); // 返回文本字符串 } public static String htmlEncode(String source) { if (source == null) { return ""; } StringBuffer buffer = new StringBuffer(); for (int i = 0; i < source.length(); i++) { char c = source.charAt(i); switch (c) { case '<': buffer.append("<"); break; case '>': buffer.append(">"); break; case '&': buffer.append("&"); break; case '"': buffer.append("""); break; case 10: case 13: break; default: buffer.append(c); } } return buffer.toString(); } public static String HtmlToTextGb2312(String inputString) { if (inputString == null || "".equals(inputString)) { return ""; } String htmlStr = inputString; // 含html标签的字符串 String textStr = ""; Pattern p_script; Matcher m_script; Pattern p_style; Matcher m_style; Pattern p_html; Matcher m_html; Pattern p_houhtml; Matcher m_houhtml; Pattern p_spe; Matcher m_spe; Pattern p_blank; Matcher m_blank; Pattern p_table; Matcher m_table; Pattern p_enter; Matcher m_enter; try { String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?/[\\s]*?script[\\s]*?>"; // 定义script的正则表达式. String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式. String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 String regEx_houhtml = "/[^>]+>"; // 定义HTML标签的正则表达式 String regEx_spe = "\\&[^;]+;"; // 定义特殊符号的正则表达式 String regEx_blank = " +"; // 定义多个空格的正则表达式 String regEx_table = "\t+"; // 定义多个制表符的正则表达式 String regEx_enter = "\n+"; // 定义多个回车的正则表达式 p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); m_script = p_script.matcher(htmlStr); htmlStr = m_script.replaceAll(""); // 过滤script标签 p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE); m_style = p_style.matcher(htmlStr); htmlStr = m_style.replaceAll(""); // 过滤style标签 p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); m_html = p_html.matcher(htmlStr); htmlStr = m_html.replaceAll(""); // 过滤html标签 p_houhtml = Pattern .compile(regEx_houhtml, Pattern.CASE_INSENSITIVE); m_houhtml = p_houhtml.matcher(htmlStr); htmlStr = m_houhtml.replaceAll(""); // 过滤html标签 p_spe = Pattern.compile(regEx_spe, Pattern.CASE_INSENSITIVE); m_spe = p_spe.matcher(htmlStr); htmlStr = m_spe.replaceAll(""); // 过滤特殊符号 p_blank = Pattern.compile(regEx_blank, Pattern.CASE_INSENSITIVE); m_blank = p_blank.matcher(htmlStr); htmlStr = m_blank.replaceAll(" "); // 过滤过多的空格 p_table = Pattern.compile(regEx_table, Pattern.CASE_INSENSITIVE); m_table = p_table.matcher(htmlStr); htmlStr = m_table.replaceAll(" "); // 过滤过多的制表符 p_enter = Pattern.compile(regEx_enter, Pattern.CASE_INSENSITIVE); m_enter = p_enter.matcher(htmlStr); htmlStr = m_enter.replaceAll(" "); // 过滤过多的制表符 textStr = htmlStr; } catch (Exception e) { System.err.println("Html2Text: " + e.getMessage()); } return textStr;// 返回文本字符串 } /** * 取字符串的前toCount个字符 * * @param str * 被处理字符串 * @param toCount * 截取长度 * @param more * 后缀字符串 * @version 2004.11.24 * @author zhulx * @return String */ public static String subString(String str, int toCount, String more) { int reInt = 0; String reStr = ""; if (str == null) return ""; char[] tempChar = str.toCharArray(); for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) { String s1 = String.valueOf(tempChar[kk]); byte[] b = s1.getBytes(); reInt += b.length; reStr += tempChar[kk]; } if (toCount == reInt || (toCount == reInt - 1)) { reStr += more; } return reStr; } /** * 按字节截取字符串,并保证不会截取半个汉字 * * @param str * @param byteLength * @return */ public static String truncate(String str, int byteLength) { if (str == null) { return null; } if (str.length() == 0) { return str; } if (byteLength < 0) { throw new IllegalArgumentException( "Parameter byteLength must be great than 0"); } char[] chs = str.toCharArray(); int i = 0; int len = 0; while ((len < byteLength) && (i < chs.length)) { len = (chs[i++] > 0xff) ? (len + 2) : (len + 1); } if (len > byteLength) { i--; } return new String(chs, 0, i); } /** * 取得字符串s的char长度 * * @param s * @return */ public static int getWordCount(String s) { int length = 0; for (int i = 0; i < s.length(); i++) { int ascii = Character.codePointAt(s, i); if (ascii >= 0 && ascii <= 255) length++; else length += 2; } return length; } public static String changeCharset(String str, String newCharset) { if (str != null) { //用默认字符编码解码字符串。 byte[] bs = str.getBytes(); //用新的字符编码生成字符串 try { return new String(bs, newCharset); } catch (UnsupportedEncodingException e) { return null; } } return null; } public static <T> String join(T[] array, String limit) { if (array == null || array.length == 0) return ""; StringBuilder sb = new StringBuilder(); for (T t : array) { sb.append(t.toString()).append(limit); } String str = sb.toString(); return str.substring(0, str.length() - limit.length()); } public static String toUpperCase(String str) { return toUpperCase(str, 1); } public static String toUpperCase(String str, int position) { if (CommonUtils.isEmpty(str)) throw new NullPointerException("str can not be empty!!"); if (position <= 0 || position > str.length()) { throw new IndexOutOfBoundsException("Position must be greater than 0 and not less than the length of the string to be processed"); } if (position == 1) {//将数个字母小写 return str.substring(0, 1).toUpperCase() + str.substring(1); } return str.substring(0, position - 1) + str.substring(position - 1, position).toUpperCase() + str.substring(position); } public static String toUpperCase(String str, int index, int len) { if (CommonUtils.isEmpty(str)) throw new NullPointerException("str can not be empty!!"); if (index <= 0 || (index + len - 1) > str.length()) { throw new IndexOutOfBoundsException("Position must be greater than 0 and not less than the length of the string to be processed"); } if (index == 1) {//将数个字母小写 return str.substring(0, len).toUpperCase() + str.substring(len); } return str.substring(0, index - 1) + str.substring(index - 1, len + 1).toUpperCase() + str.substring(index + len - 1); } public static String toLowerCase(String str) { return toLowerCase(str, 1); } public static String toLowerCase(String str, int position) { AssertUtils.notNull(str, "str can not be empty!!"); if (position <= 0 || position > str.length()) { throw new IndexOutOfBoundsException("Position must be greater than 0 and not less than the length of the string to be processed"); } if (position == 1) {//将数个字母小写 return str.substring(0, 1).toLowerCase() + str.substring(1); } return str.substring(0, position - 1) + str.substring(position - 1, position).toLowerCase() + str.substring(position); } public static String toLowerCase(String str, int index, int len) { if (CommonUtils.isEmpty(str)) throw new NullPointerException("str can not be empty!!"); if (index <= 0 || (index + len - 1) > str.length()) { throw new IndexOutOfBoundsException("Position must be greater than 0 and not less than the length of the string to be processed"); } if (index == 1) {//将数个字母小写 return str.substring(0, len).toLowerCase() + str.substring(len); } return str.substring(0, index - 1) + str.substring(index - 1, len + 1).toLowerCase() + str.substring(index + len - 1); } public static String clearLine(String val) { AssertUtils.notNull(val, "clearLine arguments must be not null"); return val.replaceAll("\\n|\\r", ""); } public static String replaceBlank(String val) { AssertUtils.notNull(val, "replaceBlank arguments must be not null"); return Pattern.compile("\\s*|\\t|\\r|\\n").matcher(val).replaceAll(""); } public static String replace(Object obj, int start, int end, String s1) { if (CommonUtils.isEmpty(obj)) return ""; if (start < 0 || end < 0) throw new IndexOutOfBoundsException("replace:startIndex and endIndex error"); String str = obj.toString(); String str1 = str.substring(0, start - 1); String str2 = str.substring(start + end - 1); String replStr = ""; for (int j = 0; j < end; j++) { replStr += s1; } return str1 + replStr + str2; } /** * 生成计费ID bs+四位随机生成的 * */ public static String generateString(int length) { String corpid = ""; int value; for (int i = 0; i < length; i++) { value = (int) (Math.random() * 26); // 26 表示只用小写字母 52表示所有字母 61表示数字字母组合 corpid += generateChar(value); } return corpid; } private static char generateChar(int value) { char temp = 't'; if (value >= 0 && value < 26) { temp = (char) ('a' + value); } else if (value >= 26 && value < 52) { temp = (char) ('A' + value - 26); } else if (value >= 52 && value < 62) { temp = (char) ('0' + value - 52); } if (temp == 's') { temp = 'z'; } return temp; } public static boolean isNumeric(String text) { if (CommonUtils.isEmpty(text)) return false; Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(text); if( !isNum.matches() ){ return false; } return true; } }