package com.cabletech.common.util; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.StringTokenizer; /** * 字符串处理类 * * @author wangt * */ public class StringUtil { /** * 计算字符串的长度 * * @param strExp * 字符串 * @return */ public static synchronized int length(String strExp) { return strExp.getBytes().length; } /** * 获取字符串左边指定个数字符组成的字符串 * * @param strExp * String * @param intLen * int */ public static synchronized String left(String strExp, int intLen) { if (intLen <= 0) return ""; if (length(strExp) <= intLen) return strExp; if (length(strExp) == strExp.length()) return strExp.substring(0, intLen); int intCLoop = 0; int intBLoop = 0; byte abytTemp[] = strExp.getBytes(); while (true) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { if (intBLoop + 2 > intLen) { break; } else { intBLoop++; intBLoop++; } } else { if (intBLoop + 1 > intLen) { break; } else { intBLoop++; } } intCLoop++; } return strExp.substring(0, intCLoop); } /** * 根据月份重组str * * @param month * String * @return */ public static String getMonth(String month) { if (Integer.parseInt(month) < 10) { return "0" + month; } else return month; } /** * 获取给定字符串指定位数的右边的字符串 * * @param strExp * String * @param intLen * int * @return */ public static synchronized String right(String strExp, int intLen) { if (intLen <= 0) return ""; if (length(strExp) <= intLen) return strExp; if (length(strExp) == strExp.length()) return strExp.substring(strExp.length() - intLen); int intCLoop = 0; int intBLoop = 0; byte abytTemp[] = strExp.getBytes(); while (intBLoop < length(strExp) - intLen) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { intBLoop++; intBLoop++; } else { intBLoop++; } intCLoop++; } return strExp.substring(intCLoop); } /** * 获取子串 * * @param strExp * String * @param intFrom * int * @return */ public static synchronized String substring(String strExp, int intFrom) { if (intFrom <= 0) return strExp; if (length(strExp) <= intFrom) return ""; int intCLoop = 0; int intBLoop = 0; byte abytTemp[] = strExp.getBytes(); while (true) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { if (intBLoop + 2 > intFrom) { break; } else { intBLoop++; intBLoop++; } } else { if (intBLoop + 1 > intFrom) { break; } else { intBLoop++; } } intCLoop++; } return strExp.substring(intCLoop); } /** * 获取子串 * * @param strExp * String * @param intFrom * int * @param intLen * int * @return */ public static synchronized String substring(String strExp, int intFrom, int intLen) { if (intLen <= 0) return ""; strExp = substring(strExp, intFrom); if (strExp.length() > 0) { strExp = left(strExp, intLen); } return strExp; } /** * indexOf * * @param strExp * String * @param strSub * String * @return */ public static synchronized int indexOf(String strExp, String strSub) { int intTemp = strExp.indexOf(strSub); if (intTemp <= 0 || length(strExp) == strExp.length()) return intTemp; int intCLoop = 0; int intBLoop = 0; byte abytTemp[] = strExp.getBytes(); while (intCLoop < intTemp) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { intBLoop++; intBLoop++; } else { intBLoop++; } intCLoop++; } return intBLoop; } /** * 获取子串的位置 * * @param strExp * String * @param strSub * String * @param intFrom * int */ public static synchronized int indexOf(String strExp, String strSub, int intFrom) { intFrom = intFrom < 0 ? 0 : intFrom; if (length(strExp) < intFrom) return -1; if (length(strExp) == strExp.length()) return strExp.indexOf(strSub, intFrom); int intCLoop = 0; int intBLoop = 0; byte abytTemp[] = strExp.getBytes(); while (true) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { if (intBLoop + 2 > intFrom) { break; } else { intBLoop++; intBLoop++; } } else { if (intBLoop + 1 > intFrom) { break; } else { intBLoop++; } } intCLoop++; } intFrom = intCLoop; int intTemp = strExp.indexOf(strSub, intFrom); if (intTemp <= 0) return intTemp; intCLoop = 0; intBLoop = 0; while (intCLoop < intTemp) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { intBLoop++; intBLoop++; } else { intBLoop++; } intCLoop++; } return intBLoop; } /** * 获取子串的最后一个位置 * * @param strExp * String * @param strSub * String * @return */ public static synchronized int lastIndexOf(String strExp, String strSub) { int intTemp = strExp.lastIndexOf(strSub); if (intTemp <= 0 || length(strExp) == strExp.length()) return intTemp; int intCLoop = 0; int intBLoop = 0; byte abytTemp[] = strExp.getBytes(); while (intCLoop < intTemp) { if (abytTemp[intBLoop] > 127 || abytTemp[intBLoop] < 0) { intBLoop++; intBLoop++; } else { intBLoop++; } intCLoop++; } return intBLoop; } /** * 用指定字符串替换原来的字符串 * * @param strExp * String * @param strFind * String * @param strRep * String * @return String */ public static synchronized String replace(String strExp, String strFind, String strRep) { int intFrom, intTo; String strHead, strTail; if (strFind == null || strFind.length() == 0) return strExp; intFrom = strExp.indexOf(strFind, 0); while (intFrom >= 0) { intTo = intFrom + strFind.length(); strHead = strExp.substring(0, intFrom); strTail = strExp.substring(intTo); strExp = strHead + strRep + strTail; intTo = intFrom + strRep.length(); intFrom = strExp.indexOf(strFind, intTo); } return strExp; } /** * 去除字串左侧开始的空格 * * @param strExp * String * @param strTrim * String * @return String */ public static synchronized String ltrim(String strExp, String strTrim) { int i; if (strExp == null || strExp.length() == 0) { strExp = ""; } if (strTrim == null || strTrim.length() == 0) return strExp; char chrTrim = strTrim.charAt(0); for (i = 0; i < strExp.length(); i++) { if (strExp.charAt(i) != chrTrim) { break; } } return strExp.substring(i); } /** * 去除字串右侧结尾处的空格 * * @param strExp * String * @param strTrim * String * @return String */ public static synchronized String rtrim(String strExp, String strTrim) { int i; if (strExp == null || strExp.length() == 0) { strExp = ""; } int intLen = strExp.length(); if (strTrim == null || strTrim.length() == 0) return strExp; char chrTrim = strTrim.charAt(0); for (i = 0; i < strExp.length(); i++) { if (strExp.charAt(intLen - i - 1) != chrTrim) { break; } } return strExp.substring(0, intLen - i); } /** * 去掉空格 * * @param strExp * String * @return */ public static synchronized String trim(String strExp) { return trim(strExp, " "); } /** * 去掉空格 * * @param strExp * String * @param strTrim * String * @return String */ public static synchronized String trim(String strExp, String strTrim) { return ltrim(rtrim(strExp, strTrim), strTrim); } /** * 进行左填充 * * @param strExp * String * @param intLen * int * @param strPad * String * @return String */ public static synchronized String lpad(String strExp, int intLen, String strPad) { if (strExp == null) { strExp = ""; } while (strExp.length() < intLen) { strExp = strPad + strExp; } return right(strExp, intLen); } /** * 进行右填充 * * @param strExp * String * @param intLen * int * @param strPad * String * @return String */ public static synchronized String rpad(String strExp, int intLen, String strPad) { if (strExp == null) { strExp = ""; } while (strExp.length() < intLen) { strExp = strExp + strPad; } return left(strExp, intLen); } /** * 在HTML中显示文本信息(替换& " < > 四种字符为HTML中的字符显示格式) * * @param strExp * String * @return String */ public static synchronized String HtmlString(String strExp) { if (strExp == null || strExp.length() == 0) return ""; strExp = replace(strExp, "&", "&"); strExp = replace(strExp, "<", "<"); strExp = replace(strExp, ">", ">"); strExp = replace(strExp, "\"", """); strExp = replace(strExp, " ", " "); return strExp; } /** * 转换文本字串为HTML字串 * * @param strExp * String */ public static synchronized String HtmlStringFromText(String strExp) { return HtmlStringFromText(strExp, ""); } // Transfer text string into html format /** * 转换文本字串为HTML字串 * * @param strExp * String * @param strPad * String */ public static synchronized String HtmlStringFromText(String strExp, String strPad) { if (strExp == null || strExp.length() == 0) return strPad; strExp = replace(strExp, "&", "&"); strExp = replace(strExp, "<", "<"); strExp = replace(strExp, ">", ">"); strExp = replace(strExp, "\"", """); strExp = replace(strExp, "\r\n", "<br>\r\n"); return strExp; } // Get data from database, and put it into JSP file as a display string /** * 转换文本字串为HTML字串 * * @param strExp * String * @param strPad * String */ public static synchronized String HtmlString(String strExp, String strPad) { if (strExp == null || strExp.trim().length() == 0) return strPad; strExp = strExp.trim(); strExp = HtmlString(strExp); return strExp; } /** * 在HTML中显示文本信息(替换& " < >四种字符为HTML中的字符显示格式) * * @param strExp * String * @return String */ public static synchronized String ShowTextArea(String strExp) { if (strExp == null || strExp.length() == 0) { return ""; } strExp = replace(strExp, "&", "&"); strExp = replace(strExp, "<", "<"); strExp = replace(strExp, ">", ">"); strExp = replace(strExp, "\"", """); return strExp; } /** * 在HTML中显示文本信息(替换\ "两种字符为HTML中的字符显示格式) * * @param strExp * String * @return String */ public static synchronized String SpecString(String strExp) { if (strExp == null || strExp.length() == 0) { return ""; } strExp = replace(strExp, "\\", "\\\\"); strExp = replace(strExp, "\"", "\\\""); return strExp; } /** * 将用;号分隔的字符串转换为字符串数组 * * @param strExp * String * @return String[] */ public static synchronized String[] getAccountInfoString(String strExp) { if (strExp == null || strExp.length() == 0) { return null; } StringTokenizer st = new StringTokenizer(strExp, ";"); String[] strTemp = new String[2]; strTemp[1] = ""; int i = 0; while (st.hasMoreTokens()) { strTemp[i++] = st.nextToken(); } return strTemp; } /** * List 转换为 String <br> * 转换的string 类型主要用于sql中。 * * @param strList * List<String> * @return String */ public static String listStr4Sql(List<String> strList) { String listString = strList.toString(); listString = listString.replace('[', '\''); listString = listString.replaceAll(", ", "','"); listString = listString.replace(']', '\''); return listString; } /** * 将map的字符串显示换为,号分隔的字符串 * * @param strmap * Map<String, String> * @return String */ public static String map2StrSql(Map<String, String> strmap) { String mapstring = strmap.toString(); mapstring = mapstring.replace('{', '\''); mapstring = mapstring.replaceAll(", ", "','"); mapstring = mapstring.replaceAll("=", "','"); mapstring = mapstring.replace('}', '\''); return mapstring + ",''"; } /** * 将字符串数组转换成,号分隔的字符串 * * @param array * String[] * @return String */ public static String array2String(String[] array) { return list2StringComma(Arrays.asList(array)); } /** * 将数值型字符串转换成Integer型 * * @since 1.0 * @param str * String 需要转换的字符型字符串 * @param ret * Integer 转换失败时返回的值 * @return 成功则返回转换后的Integer型值;失败则返回ret */ public static Integer String2Integer(String str, Integer ret) { try { return Integer.parseInt(str); } catch (NumberFormatException e) { return ret; } } /** * 将list数组转换为以逗号分隔的字符串 例如:sohu,sina,google,baidu, * * @param list * <String> * @return */ public static String list2StringComma(List<String> list) { return list2String(list, ","); } /** * 将list以#(pound)进行分隔 例如:sohu#sina#google#baidu# * * @param list * List<String> * @return String */ public static String list2StringPound(List<String> list) { return list2String(list, "#"); } /** * 将数组切割成以指定分隔符分隔的字符串 * * @param list * 数组 * @param separator * 分隔符 * @return */ public static String list2String(List<String> list, String separator) { StringBuilder strs = new StringBuilder(); int i = 1; int size = list.size(); for (String str : list) { strs.append(str); if (i < size) { strs.append(separator); } i++; } return strs.toString(); } /** * 将以指定分隔符分隔的字符串,重组为数组 * * @param str * 以指定分隔符分隔的字符串 * @param separator * 分隔符 * @return */ public static List<String> string2List(String str, String separator) { List<String> list = new ArrayList<String>(); if (str != null) { StringTokenizer st = new StringTokenizer(str, separator); while (st.hasMoreTokens()) { list.add(st.nextToken()); } } return list; } /** * 将以#号分隔的字符串,重组成数组 * * @param str * String * @return */ @SuppressWarnings("rawtypes") public static List string2ListPound(String str) { return StringUtil.string2List(str, "#"); } /** * 获得合适于select_options的字符串 * * @param ls * List 转换的list * @return String */ public static String selectedOtionsAjaxStr(List<Map<String, Object>> ls) { StringBuffer buf = new StringBuffer(); Map<String, Object> map = null; for (int i = 0; i < ls.size(); i++) { map = ls.get(i); buf.append(map.get("ID")); buf.append(","); buf.append(map.get("NAME")); if (i < ls.size() - 1) { buf.append(";"); } } return buf.toString(); } }