/** * Company Name : 中贸促信息技术有限责任公司 * Project Name:memberManageSys * File Name:StringUtil.java * Package Name:ccpit.base.utils * Date:2016年2月26日下午4:42:06 * Copyright (c) 2016, dingwei@ccpit.org All Rights Reserved. * */ package org.ccpit.base.utils; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Properties; import java.util.Random; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * ClassName:StringUtil <br/> * Function: TODO 字符串处理工具类. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年2月26日 下午4:42:06 <br/> * * @author dingwei * @version * @since JDK 1.6 * @see */ public class StringUtil { public static SimpleDateFormat DATE_FORMATE = new SimpleDateFormat("yyyy-MM-dd"); private static final String FOLDER_SEPARATOR = "/"; private static final String WINDOWS_FOLDER_SEPARATOR = "\\"; private static final String TOP_PATH = ".."; private static final String CURRENT_PATH = "."; private static final char EXTENSION_SEPARATOR = '.'; private static final String REGIX_STANDARD = "^([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[\\.][A-Za-z]{2,3}([\\.][A-Za-z]{2})?$"; public static final String EMAIL_ACCOUNT = ReadConfigUtil.getPlatformConfig().get("email.emailAccount"); //邮箱账号 public static final String EMAIL_PASSWORD = ReadConfigUtil.getPlatformConfig().get("email.password"); //邮箱密码 public static final String EMAIL_STMP = ReadConfigUtil.getPlatformConfig().get("email.smtp"); //邮箱服务器协议 public static final String EMAIL_HOST = ReadConfigUtil.getPlatformConfig().get("email.host"); //邮箱服务器协议 public static final String SYSTEM_TELPHONE = ReadConfigUtil.getPlatformConfig().get("system.telphone"); //电话 public static final String SYSTEM_NAME = ReadConfigUtil.getPlatformConfig("system.name"); //项目名称 public static final String SYSTEM_VISIT_URL = ReadConfigUtil.getPlatformConfig("system.visit_url"); //项目访问地址 public static boolean hasLength(CharSequence str) { return (str != null) && (str.length() > 0); } public static boolean hasLength(String str) { return hasLength(str); } public static boolean hasText(CharSequence str) { if (!hasLength(str)) { return false; } int strLen = str.length(); for (int i = 0; i < strLen; i++) { if (!Character.isWhitespace(str.charAt(i))) { return true; } } return false; } public static boolean hasText(String str) { if (null != str && str.length() > 0) { return true; } else { return false; } } public static boolean containsWhitespace(CharSequence str) { if (!hasLength(str)) { return false; } int strLen = str.length(); for (int i = 0; i < strLen; i++) { if (Character.isWhitespace(str.charAt(i))) { return true; } } return false; } public static boolean containsWhitespace(String str) { return containsWhitespace(str); } public static String trimWhitespace(String str) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); do { sb.deleteCharAt(0); if (sb.length() <= 0) break; } while (Character.isWhitespace(sb.charAt(0))); while ((sb.length() > 0) && (Character.isWhitespace(sb.charAt(sb.length() - 1)))) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } public static String trimAllWhitespace(String str) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); int index = 0; while (sb.length() > index) { if (Character.isWhitespace(sb.charAt(index))) { sb.deleteCharAt(index); } else { index++; } } return sb.toString(); } public static String trimLeadingWhitespace(String str) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); while ((sb.length() > 0) && (Character.isWhitespace(sb.charAt(0)))) { sb.deleteCharAt(0); } return sb.toString(); } public static String trimTrailingWhitespace(String str) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); while ((sb.length() > 0) && (Character.isWhitespace(sb.charAt(sb.length() - 1)))) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } public static String trimLeadingCharacter(String str, char leadingCharacter) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); while ((sb.length() > 0) && (sb.charAt(0) == leadingCharacter)) { sb.deleteCharAt(0); } return sb.toString(); } public static String trimTrailingCharacter(String str, char trailingCharacter) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); while ((sb.length() > 0) && (sb.charAt(sb.length() - 1) == trailingCharacter)) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } public static boolean startsWithIgnoreCase(String str, String prefix) { if ((str == null) || (prefix == null)) { return false; } if (str.startsWith(prefix)) { return true; } if (str.length() < prefix.length()) { return false; } String lcStr = str.substring(0, prefix.length()).toLowerCase(); String lcPrefix = prefix.toLowerCase(); return lcStr.equals(lcPrefix); } public static boolean endsWithIgnoreCase(String str, String suffix) { if ((str == null) || (suffix == null)) { return false; } if (str.endsWith(suffix)) { return true; } if (str.length() < suffix.length()) { return false; } String lcStr = str.substring(str.length() - suffix.length()) .toLowerCase(); String lcSuffix = suffix.toLowerCase(); return lcStr.equals(lcSuffix); } public static boolean substringMatch(CharSequence str, int index, CharSequence substring) { for (int j = 0; j < substring.length(); j++) { int i = index + j; if ((i >= str.length()) || (str.charAt(i) != substring.charAt(j))) { return false; } } return true; } public static int countOccurrencesOf(String str, String sub) { if ((str == null) || (sub == null) || (str.length() == 0) || (sub.length() == 0)) { return 0; } int count = 0; int pos = 0; int idx; while ((idx = str.indexOf(sub, pos)) != -1) { count++; pos = idx + sub.length(); } return count; } public static String replace(String inString, String oldPattern,String newPattern) { if ((!hasLength(inString)) || (!hasLength(oldPattern)) || (newPattern == null)) { return inString; } StringBuilder sb = new StringBuilder(); int pos = 0; int index = inString.indexOf(oldPattern); int patLen = oldPattern.length(); while (index >= 0) { sb.append(inString.substring(pos, index)); sb.append(newPattern); pos = index + patLen; index = inString.indexOf(oldPattern, pos); } sb.append(inString.substring(pos)); return sb.toString(); } public static String delete(String inString, String pattern) { return replace(inString, pattern, ""); } public static String deleteAny(String inString, String charsToDelete) { if ((!hasLength(inString)) || (!hasLength(charsToDelete))) { return inString; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < inString.length(); i++) { char c = inString.charAt(i); if (charsToDelete.indexOf(c) == -1) { sb.append(c); } } return sb.toString(); } public static String quote(String str) { return str != null ? "'" + str + "'" : null; } public static Object quoteIfString(Object obj) { return (obj instanceof String) ? quote((String) obj) : obj; } public static String unqualify(String qualifiedName) { return unqualify(qualifiedName, '.'); } public static String unqualify(String qualifiedName, char separator) { return qualifiedName .substring(qualifiedName.lastIndexOf(separator) + 1); } public static String capitalize(String str) { return changeFirstCharacterCase(str, true); } public static String uncapitalize(String str) { return changeFirstCharacterCase(str, false); } private static String changeFirstCharacterCase(String str, boolean capitalize) { if ((str == null) || (str.length() == 0)) { return str; } StringBuilder sb = new StringBuilder(str.length()); if (capitalize) { sb.append(Character.toUpperCase(str.charAt(0))); } else { sb.append(Character.toLowerCase(str.charAt(0))); } sb.append(str.substring(1)); return sb.toString(); } /** * * getFilename:(获取文件名). <br/> * @author dingwei * @param path * @return * @since JDK 1.6 */ public static String getFilename(String path) { if (path == null) { return null; } int separatorIndex = path.lastIndexOf("/"); return separatorIndex != -1 ? path.substring(separatorIndex + 1) : path; } /** * * getFilenameExtension:(获取文件后缀名). <br/> * @author dingwei * @param path * @return * @since JDK 1.6 */ public static String getFilenameExtension(String path) { if (path == null) { return null; } int extIndex = path.lastIndexOf('.'); if (extIndex == -1) { return null; } int folderIndex = path.lastIndexOf("/"); if (folderIndex > extIndex) { return null; } return path.substring(extIndex + 1); } public static String stripFilenameExtension(String path) { if (path == null) { return null; } int extIndex = path.lastIndexOf('.'); if (extIndex == -1) { return path; } int folderIndex = path.lastIndexOf("/"); if (folderIndex > extIndex) { return path; } return path.substring(0, extIndex); } public static String applyRelativePath(String path, String relativePath) { int separatorIndex = path.lastIndexOf("/"); if (separatorIndex != -1) { String newPath = path.substring(0, separatorIndex); if (!relativePath.startsWith("/")) { newPath = newPath + "/"; } return newPath + relativePath; } return relativePath; } public static String cleanPath(String path) { if (path == null) { return null; } String pathToUse = replace(path, "\\", "/"); int prefixIndex = pathToUse.indexOf(":"); String prefix = ""; if (prefixIndex != -1) { prefix = pathToUse.substring(0, prefixIndex + 1); pathToUse = pathToUse.substring(prefixIndex + 1); } if (pathToUse.startsWith("/")) { prefix = prefix + "/"; pathToUse = pathToUse.substring(1); } String[] pathArray = delimitedListToStringArray(pathToUse, "/"); List pathElements = new LinkedList(); int tops = 0; for (int i = pathArray.length - 1; i >= 0; i--) { String element = pathArray[i]; if (!".".equals(element)) { if ("..".equals(element)) { tops++; } else if (tops > 0) { tops--; } else { pathElements.add(0, element); } } } for (int i = 0; i < tops; i++) { pathElements.add(0, ".."); } return prefix + collectionToDelimitedString(pathElements, "/"); } /** * * pathEquals:(路径匹配). <br/> * @author dingwei * @param path1 * @param path2 * @return * @since JDK 1.6 */ public static boolean pathEquals(String path1, String path2) { return cleanPath(path1).equals(cleanPath(path2)); } public static Locale parseLocaleString(String localeString) { String[] parts = tokenizeToStringArray(localeString, "_ ", false, false); String language = parts.length > 0 ? parts[0] : ""; String country = parts.length > 1 ? parts[1] : ""; validateLocalePart(language); validateLocalePart(country); String variant = ""; if (parts.length >= 2) { int endIndexOfCountryCode = localeString.indexOf(country) + country.length(); variant = trimLeadingWhitespace(localeString .substring(endIndexOfCountryCode)); if (variant.startsWith("_")) { variant = trimLeadingCharacter(variant, '_'); } } return language.length() > 0 ? new Locale(language, country, variant) : null; } private static void validateLocalePart(String localePart) { for (int i = 0; i < localePart.length(); i++) { char ch = localePart.charAt(i); if ((ch != '_') && (ch != ' ') && (!Character.isLetterOrDigit(ch))) { throw new IllegalArgumentException("Locale part \"" + localePart + "\" contains invalid characters"); } } } public static String toLanguageTag(Locale locale) { return locale.getLanguage() + (hasText(locale.getCountry()) ? "-" + locale.getCountry() : ""); } public static String[] addStringToArray(String[] array, String str) { if (ObjectUtil.isEmpty(array)) { return new String[] { str }; } String[] newArr = new String[array.length + 1]; System.arraycopy(array, 0, newArr, 0, array.length); newArr[array.length] = str; return newArr; } public static String[] concatenateStringArrays(String[] array1, String[] array2) { if (ObjectUtil.isEmpty(array1)) { return array2; } if (ObjectUtil.isEmpty(array2)) { return array1; } String[] newArr = new String[array1.length + array2.length]; System.arraycopy(array1, 0, newArr, 0, array1.length); System.arraycopy(array2, 0, newArr, array1.length, array2.length); return newArr; } public static String[] mergeStringArrays(String[] array1, String[] array2) { if (ObjectUtil.isEmpty(array1)) { return array2; } if (ObjectUtil.isEmpty(array2)) { return array1; } List result = new ArrayList(); result.addAll(Arrays.asList(array1)); for (String str : array2) { if (!result.contains(str)) { result.add(str); } } return toStringArray(result); } public static String[] sortStringArray(String[] array) { if (ObjectUtil.isEmpty(array)) { return new String[0]; } Arrays.sort(array); return array; } public static String[] toStringArray(Collection<String> collection) { if (collection == null) { return null; } return (String[]) collection.toArray(new String[collection.size()]); } public static String[] toStringArray(Enumeration<String> enumeration) { if (enumeration == null) { return null; } List list = Collections.list(enumeration); return (String[]) list.toArray(new String[list.size()]); } public static String[] trimArrayElements(String[] array) { if (ObjectUtil.isEmpty(array)) { return new String[0]; } String[] result = new String[array.length]; for (int i = 0; i < array.length; i++) { String element = array[i]; result[i] = (element != null ? element.trim() : null); } return result; } public static String[] removeDuplicateStrings(String[] array) { if (ObjectUtil.isEmpty(array)) { return array; } Set set = new TreeSet(); String[] arrayOfString = array; int j = array.length; for (int i = 0; i < j; i++) { String element = arrayOfString[i]; set.add(element); } return toStringArray(set); } public static String[] split(String toSplit, String delimiter) { if ((!hasLength(toSplit)) || (!hasLength(delimiter))) { return null; } int offset = toSplit.indexOf(delimiter); if (offset < 0) { return null; } String beforeDelimiter = toSplit.substring(0, offset); String afterDelimiter = toSplit.substring(offset + delimiter.length()); return new String[] { beforeDelimiter, afterDelimiter }; } public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter) { return splitArrayElementsIntoProperties(array, delimiter, null); } public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter, String charsToDelete) { if (ObjectUtil.isEmpty(array)) { return null; } Properties result = new Properties(); String[] arrayOfString1 = array; int j = array.length; for (int i = 0; i < j; i++) { String element = arrayOfString1[i]; if (charsToDelete != null) { element = deleteAny(element, charsToDelete); } String[] splittedElement = split(element, delimiter); if (splittedElement != null) { result.setProperty(splittedElement[0].trim(), splittedElement[1].trim()); } } return result; } public static String[] tokenizeToStringArray(String str, String delimiters) { return tokenizeToStringArray(str, delimiters, true, true); } public static String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens) { if (str == null) { return null; } StringTokenizer st = new StringTokenizer(str, delimiters); List tokens = new ArrayList(); while (st.hasMoreTokens()) { String token = st.nextToken(); if (trimTokens) { token = token.trim(); } if ((!ignoreEmptyTokens) || (token.length() > 0)) { tokens.add(token); } } return toStringArray(tokens); } public static String[] delimitedListToStringArray(String str, String delimiter) { return delimitedListToStringArray(str, delimiter, null); } public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) { if (str == null) { return new String[0]; } if (delimiter == null) { return new String[] { str }; } List result = new ArrayList(); if ("".equals(delimiter)) { for (int i = 0; i < str.length(); i++) { result.add(deleteAny(str.substring(i, i + 1), charsToDelete)); } } else { int pos = 0; int delPos; while ((delPos = str.indexOf(delimiter, pos)) != -1) { result.add(deleteAny(str.substring(pos, delPos), charsToDelete)); pos = delPos + delimiter.length(); } if ((str.length() > 0) && (pos <= str.length())) { result.add(deleteAny(str.substring(pos), charsToDelete)); } } return toStringArray(result); } public static String[] commaDelimitedListToStringArray(String str) { return delimitedListToStringArray(str, ","); } public static Set<String> commaDelimitedListToSet(String str) { Set set = new TreeSet(); String[] tokens = commaDelimitedListToStringArray(str); for (String token : tokens) { set.add(token); } return set; } public static String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix) { if (CollectionUtil.isEmpty(coll)) { return ""; } StringBuilder sb = new StringBuilder(); Iterator it = coll.iterator(); while (it.hasNext()) { sb.append(prefix).append(it.next()).append(suffix); if (it.hasNext()) { sb.append(delim); } } return sb.toString(); } public static String collectionToDelimitedString(Collection<?> coll, String delim) { return collectionToDelimitedString(coll, delim, "", ""); } public static String collectionToCommaDelimitedString(Collection<?> coll) { return collectionToDelimitedString(coll, ","); } public static String arrayToDelimitedString(Object[] arr, String delim) { if (ObjectUtil.isEmpty(arr)) { return ""; } if (arr.length == 1) { return ObjectUtil.nullSafeToString(arr[0]); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < arr.length; i++) { if (i > 0) { sb.append(delim); } sb.append(arr[i]); } return sb.toString(); } public static String arrayToCommaDelimitedString(Object[] arr) { return arrayToDelimitedString(arr, ","); } /** * * validateFileSuffix:(验证文件后缀名是否符合要求). <br/> * @author dingwei * @param fileName * @return * @since JDK 1.6 */ public boolean validateFileSuffix(String fileName){ boolean accord = false; String suffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()); suffix = suffix.toLowerCase(); if("jpg".equals(suffix) || "jpeg".equals(suffix) || "png".equals(suffix) || "bmp".equals(suffix) || "gif".equals(suffix) || "tiff".equals(suffix)){ accord = true; } return accord; } /** * * getRandomString:(随机生成字符串的). <br/> * @author dingwei * @param length * @return * @since JDK 1.6 */ public static String getRandomString(int length) { String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } /** * * getRandomStringUrl:(随机生成字符串的). <br/> * @author dingwei * @param length * @return * @since JDK 1.6 */ public static String getRandomStringUrl(int length) { String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } /** * * validateEmail:(验证邮箱格式是否正确). <br/> * @author dingwei * @param emailpath * @return * Date:2016年4月26日下午1:45:55 * @since JDK 1.6 */ public static boolean validateEmail(String emailpath){ Pattern p = Pattern.compile(REGIX_STANDARD); Matcher m = p.matcher(emailpath); return m.matches(); } /** * 在前台界面用encodeURI(encodeURI(中文参数)),将参数包裹,传入后台,后台接收之后,用此方法进行处理 * stringMessyCodeTranslate:(中文字符ascii码转换方法). <br/> * @author dingwei * @param str * @return * @since JDK 1.6 */ public static final String stringMessyCodeTranslate(String str){ try { str = java.net.URLDecoder.decode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } }