java 常用小工具总结
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.InetAddress;import java.net.URLEncoder;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Properties;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import sun.misc.BASE64Decoder;public class Util {static final Logger log = LoggerFactory.getLogger(Util.class);private static String emailAddress = null;private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");static {getEmailAddress();}/** * 在源字符串中从右开始对匹配串中的子串按右开始进行逐一查找,直到左边最后一个匹配项 在源字符串中的位置 相对于StartPos的第一次匹配 * * * @param SourceContent * 源字符串 * @param StartPos * 开始位置 * * @param MatchRule * 匹配串或匹配表达式 * * @return */public static int MoveToLastIndexOf(String SourceContent, int StartPos,String MatchRule) {try {if (SourceContent.length() < 1)return -1;ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;if (List.size() > 0) {for (int i = List.size() - 1; i > -1; i--) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.lastIndexOf(param.Index, Pos);if (Pos < 0) {return -1;} else {param.Point = Pos;LastPos = Pos;Pos -= param.Index.length();}}}} else {LastPos = SourceContent.lastIndexOf(MatchRule, Pos);}return LastPos;} catch (Exception e) {e.printStackTrace();return -1;}}public static int MoveToLastIndexOf_f(String SourceContent, int StartPos,String MatchRule) {try {if (SourceContent.length() < 1)return -1;ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;if (List.size() > 0) {for (int i = List.size() - 1; i > -1; i--) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.lastIndexOf(param.Index, Pos);if (Pos < 0) {return -1;} else {param.Point = Pos;if (LastPos < 0)LastPos = Pos;Pos -= param.Index.length();}}}} else {LastPos = SourceContent.lastIndexOf(MatchRule, Pos);}return LastPos;} catch (Exception e) {e.printStackTrace();return -1;}}public static int MoveToLastIndexOf_l(String SourceContent, int StartPos,String MatchRule) {try {if (SourceContent.length() < 1)return -1;ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;if (List.size() > 0) {for (int i = List.size() - 1; i > -1; i--) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.lastIndexOf(param.Index, Pos);if (Pos < 0) {return -1;} else {param.Point = Pos;LastPos = Pos;Pos -= param.Index.length();}}}} else {LastPos = SourceContent.lastIndexOf(MatchRule, Pos);}return LastPos;} catch (Exception e) {e.printStackTrace();return -1;}}/** * 在源字符串中从左开始对匹配串中的子串按左开始进行逐一查找,直到右边最后一个匹配项 在源字符串中的位置, 相对于StartPos的第一次匹配 * * * @param SourceContent * 源字符串 * @param StartPos * 开始位置 * * @param MatchRule * 匹配串或匹配表达式 * * @return */public static int MoveToIndexOf(String SourceContent, int StartPos,String MatchRule) {try {if (SourceContent.length() < 1)return -1;ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;if (List.size() > 0) {for (int i = 0; i < List.size(); i++) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.indexOf(param.Index, Pos);if (Pos < 0) {return -1;} else {param.Point = Pos;LastPos = Pos;Pos += param.Index.length();}}}} else {LastPos = SourceContent.indexOf(MatchRule, Pos);}return LastPos;} catch (Exception e) {e.printStackTrace();return -1;}}public static int MoveToIndexOf_f(String SourceContent, int StartPos,String MatchRule) {try {if (SourceContent.length() < 1)return -1;ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;if (List.size() > 0) {for (int i = 0; i < List.size(); i++) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.indexOf(param.Index, Pos);if (Pos < 0) {return -1;} else {param.Point = Pos;if (LastPos < 0)LastPos = Pos;Pos += param.Index.length();}}}} else {LastPos = SourceContent.indexOf(MatchRule, Pos);}return LastPos;} catch (Exception e) {e.printStackTrace();return -1;}}public static int MoveToIndexOf_l(String SourceContent, int StartPos,String MatchRule) {try {if (SourceContent.length() < 1)return -1;ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;if (List.size() > 0) {for (int i = 0; i < List.size(); i++) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.indexOf(param.Index, Pos);if (Pos < 0) {return -1;} else {param.Point = Pos;LastPos = Pos + param.Index.length();Pos += param.Index.length();}}}} else {LastPos = SourceContent.indexOf(MatchRule, Pos);if (LastPos > -1) {LastPos += MatchRule.length();}}return LastPos;} catch (Exception e) {e.printStackTrace();return -1;}}public static SubStrResultList getSubStrings(String SourceContent,int StartPos, String MatchRangeStart, String MatchRangeEnd,String[] SubMatchRules) {SubStrResultList ssrl = new SubStrResultList();try {int pos = StartPos;int Count = 0;while (pos > -1 && Count < 10000) {SubStrResult ssr = SubString(SourceContent, pos,MatchRangeStart, MatchRangeEnd, SubMatchRules);pos = ssr.CurrentPos;if (pos > -1 && ssr.MatchStatus) {ssrl.addItem(ssr);}Count++;}return ssrl;} catch (Exception e) {ssrl.setErrorInfo(e.getMessage());return ssrl;}}/** * 将SourceContent内以StartPos起点将最近的MatchRangeStart 和 MatchRangeEnd * 之间的字符截取,截取后的内容使用集合SubMatchRules中的依次进行匹配,找到第一个满足条件的的正确匹配后,返回 * * 注意返回的SubStrResult.CurrentPos位置是相对与StartPos的MatchRangeEnd的位置 * * * @param SourceContent * @param StartPos * @param MatchRangeStart * @param MatchRangeEnd * @param SubMatchRules * @return */public static SubStrResult SubString(String SourceContent, int StartPos,String MatchRangeStart, String MatchRangeEnd, String[] SubMatchRules) {SubStrResult result = new SubStrResult();result.CurrentPos = -1;if (SourceContent == null || SourceContent.length() < 1)return result;try {if (MatchRangeStart.length() > 0 && MatchRangeEnd.length() > 0) {// int PosA = SourceContent.indexOf(MatchRangeStart, StartPos);int PosA = MoveToIndexOf_l(SourceContent, StartPos,MatchRangeStart);if (PosA > -1) {// PosA += MatchRangeStart.length();// int PosB = SourceContent.indexOf(MatchRangeEnd, PosA);int PosB = MoveToIndexOf_f(SourceContent, PosA,MatchRangeEnd);if (PosB > -1) {String TempContent = SourceContent.substring(PosA, PosB);for (int i = 0; i < SubMatchRules.length; i++) {SubStrResult subResult = SubString(TempContent, 0,SubMatchRules[i]);if (subResult.CurrentPos > -1) {subResult.CurrentPos = PosB;subResult.MatchStatus = true;return subResult;}}// 表示子匹配项没有成功,但是块能成功,可以继续查找下去result.CurrentPos = PosB;result.MatchStatus = false;return result;}}result.CurrentPos = -1;return result;} else {result.CurrentPos = -1;return result;}} catch (Exception e) {e.printStackTrace();result.CurrentPos = -1;return result;}}public static SubStrResultList getSubStringsForLast(String SourceContent,int StartPos, String MatchRangeStart, String MatchRangeEnd,String[] SubMatchRules) {SubStrResultList ssrl = new SubStrResultList();try {int pos = StartPos;int Count = 0;while (pos > -1 && Count < 10000) {SubStrResult ssr = SubStringForLast(SourceContent, pos,MatchRangeStart, MatchRangeEnd, SubMatchRules);pos = ssr.CurrentPos;if (pos > -1 && ssr.MatchStatus) {ssrl.addItem(ssr);}Count++;}return ssrl;} catch (Exception e) {ssrl.setErrorInfo(e.getMessage());return ssrl;}}public static SubStrResult SubStringForLast(String SourceContent,int StartPos, String MatchRangeStart, String MatchRangeEnd,String[] SubMatchRules) {SubStrResult result = new SubStrResult();result.CurrentPos = -1;int StartPos_ = StartPos;if (StartPos_ == 0) {StartPos_ = SourceContent.length();}if (SourceContent == null || SourceContent.length() < 1)return result;try {if (MatchRangeStart.length() > 0 && MatchRangeEnd.length() > 0) {// int PosA = SourceContent.indexOf(MatchRangeStart, StartPos);int PosA = MoveToLastIndexOf_l(SourceContent, StartPos_,MatchRangeEnd);if (PosA > -1) {// PosA += MatchRangeStart.length();// int PosB = SourceContent.indexOf(MatchRangeEnd, PosA);int PosB = MoveToLastIndexOf_f(SourceContent, PosA,MatchRangeStart);if (PosB > -1) {String TempContent = SourceContent.substring(PosB, PosA);for (int i = 0; i < SubMatchRules.length; i++) {SubStrResult subResult = SubString(TempContent, 0,SubMatchRules[i]);if (subResult.CurrentPos > -1) {subResult.CurrentPos = PosB;subResult.MatchStatus = true;return subResult;}}// 表示子匹配项没有成功,但是块能成功,可以继续查找下去result.CurrentPos = PosB;result.MatchStatus = false;return result;}}result.CurrentPos = -1;return result;} else {result.CurrentPos = -1;return result;}} catch (Exception e) {e.printStackTrace();result.CurrentPos = -1;return result;}}public static SubStrResultList getSubStrings(String SourceContent,int StartPos, String MatchRangeStart, String MatchRangeEnd,String SubMatchRule) {SubStrResultList ssrl = new SubStrResultList();try {int pos = StartPos;int Count = 0;while (pos > -1 && Count < 10000) {SubStrResult ssr = SubString(SourceContent, pos,MatchRangeStart, MatchRangeEnd, SubMatchRule);pos = ssr.CurrentPos;if (pos > -1 && ssr.MatchStatus) {ssrl.addItem(ssr);}Count++;}return ssrl;} catch (Exception e) {ssrl.setErrorInfo(e.getMessage());return ssrl;}}/** * 将SourceContent内以StartPos起点将最近的MatchRangeStart 和 MatchRangeEnd * 之间的字符截取,截取后的内容以SubMatchRule,进行匹配 * * 注意返回的SubStrResult.CurrentPos位置是相对与StartPos的MatchRangeEnd的位置 * * * @param SourceContent * @param StartPos * @param MatchRangeStart * @param MatchRangeEnd * @param SubMatchRule * @return */public static SubStrResult SubString(String SourceContent, int StartPos,String MatchRangeStart, String MatchRangeEnd, String SubMatchRule) {SubStrResult result = new SubStrResult();result.CurrentPos = -1;if (SourceContent == null || SourceContent.length() < 1)return result;try {if (MatchRangeStart.length() > 0 && MatchRangeEnd.length() > 0) {// int PosA = SourceContent.indexOf(MatchRangeStart, StartPos);int PosA = MoveToIndexOf_l(SourceContent, StartPos,MatchRangeStart);if (PosA > -1) {// PosA += MatchRangeStart.length();// int PosB = SourceContent.indexOf(MatchRangeEnd, PosA);int PosB = MoveToIndexOf_f(SourceContent, PosA,MatchRangeEnd);if (PosB > -1) {String TempContent = SourceContent.substring(PosA, PosB);SubStrResult subResult = SubString(TempContent, 0,SubMatchRule);if (subResult.CurrentPos > -1) {subResult.MatchStatus = true;}subResult.CurrentPos = PosB;return subResult;}}result.CurrentPos = -1;return result;} else {return SubString(SourceContent, StartPos, SubMatchRule);}} catch (Exception e) {e.printStackTrace();result.CurrentPos = -1;return result;}}public static SubStrResultList getSubStringsForLast(String SourceContent,int StartPos, String MatchRangeStart, String MatchRangeEnd,String SubMatchRule) {SubStrResultList ssrl = new SubStrResultList();try {int pos = StartPos;int Count = 0;while (pos > -1 && Count < 10000) {SubStrResult ssr = SubStringForLast(SourceContent, pos,MatchRangeStart, MatchRangeEnd, SubMatchRule);pos = ssr.CurrentPos;if (pos > -1 && ssr.MatchStatus) {ssrl.addItem(ssr);}Count++;}return ssrl;} catch (Exception e) {ssrl.setErrorInfo(e.getMessage());return ssrl;}}public static SubStrResult SubStringForLast(String SourceContent,int StartPos, String MatchRangeStart, String MatchRangeEnd,String SubMatchRule) {SubStrResult result = new SubStrResult();result.CurrentPos = -1;int StartPos_ = StartPos;if (StartPos_ == 0) {StartPos_ = SourceContent.length();}if (SourceContent == null || SourceContent.length() < 1)return result;try {if (MatchRangeStart.length() > 0 && MatchRangeEnd.length() > 0) {// int PosA = SourceContent.indexOf(MatchRangeStart, StartPos);int PosA = MoveToLastIndexOf_l(SourceContent, StartPos_,MatchRangeEnd);if (PosA > -1) {// PosA += MatchRangeStart.length();// int PosB = SourceContent.indexOf(MatchRangeEnd, PosA);int PosB = MoveToLastIndexOf_f(SourceContent, PosA,MatchRangeStart);if (PosB > -1) {String TempContent = SourceContent.substring(PosB, PosA);SubStrResult subResult = SubString(TempContent, 0,SubMatchRule);if (subResult.CurrentPos > -1) {subResult.MatchStatus = true;}subResult.CurrentPos = PosB;return subResult;}}result.CurrentPos = -1;return result;} else {return SubString(SourceContent, StartPos, SubMatchRule);}} catch (Exception e) {e.printStackTrace();result.CurrentPos = -1;return result;}}public static SubStrResultList getSubStrings(String SourceContent,int StartPos, String MatchRule) {SubStrResultList ssrl = new SubStrResultList();try {int pos = StartPos;int Count = 0;while (pos > -1 && Count < 10000) {SubStrResult ssr = SubString(SourceContent, pos, MatchRule);pos = ssr.CurrentPos;if (pos > -1) {ssrl.addItem(ssr);}Count++;}return ssrl;} catch (Exception e) {ssrl.setErrorInfo(e.getMessage());return ssrl;}}/** * 在SourceContent中以StartPos为起点,找到最近满足MatchRule的值。 * * * @param SourceContent * @param StartPos * @param MatchRule * @return */public static SubStrResult SubString(String SourceContent, int StartPos,String MatchRule) {SubStrResult result = new SubStrResult();result.CurrentPos = -1;if (SourceContent == null || SourceContent.length() < 1)return result;try {ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;int LastPos = -1;for (int i = 0; i < List.size(); i++) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.indexOf(param.Index, Pos);if (Pos < 0) {result.CurrentPos = -1;result.ErrorInfo = "indexof :" + param.Index;return result;} else {param.Point = Pos;LastPos = Pos;Pos += param.Index.length();}}}for (int i = 0; i < List.size(); i++) {SubStrParam param = List.get(i);if (!param.isIndex && !param.Index.equals("*")) {SubStrParam paramA = List.get(i - 1);SubStrParam paramB = List.get(i + 1);int PosA = paramA.Point + paramA.Index.length();int PosB = paramB.Point;String Data = "";try {Data = SourceContent.substring(PosA, PosB);} catch (Exception e) {result.CurrentPos = -1;return result;}result.Add(param.Index, Data.trim());}}result.CurrentPos = LastPos;return result;} catch (Exception e) {e.printStackTrace();result.CurrentPos = -1;return result;}}public static SubStrResultList getSubStringsForLast(String SourceContent,int StartPos, String MatchRule) {SubStrResultList ssrl = new SubStrResultList();try {int pos = StartPos;int Count = 0;while (pos > -1 && Count < 10000) {SubStrResult ssr = SubStringForLast(SourceContent, pos,MatchRule);pos = ssr.CurrentPos;if (pos > -1) {ssrl.addItem(ssr);}Count++;}return ssrl;} catch (Exception e) {ssrl.setErrorInfo(e.getMessage());return ssrl;}}public static SubStrResult SubStringForLast(String SourceContent,int StartPos, String MatchRule) {SubStrResult result = new SubStrResult();result.CurrentPos = -1;if (SourceContent == null || SourceContent.length() < 1)return result;try {ArrayList<SubStrParam> List = GetParamList(MatchRule);int Pos = StartPos;if (Pos == 0) {Pos = SourceContent.length();}int LastPos = -1;for (int i = List.size() - 1; i >= 0; i--) {SubStrParam param = List.get(i);if (param.isIndex) {Pos = SourceContent.lastIndexOf(param.Index, Pos);if (Pos < 0) {result.CurrentPos = -1;result.ErrorInfo = "indexof :" + param.Index;return result;} else {param.Point = Pos;LastPos = Pos - param.Index.length();Pos -= param.Index.length();}}}for (int i = 0; i < List.size(); i++) {SubStrParam param = List.get(i);if (!param.isIndex && !param.Index.equals("*")) {SubStrParam paramA = List.get(i - 1);SubStrParam paramB = List.get(i + 1);int PosA = paramA.Point + paramA.Index.length();int PosB = paramB.Point;String Data = "";try {Data = SourceContent.substring(PosA, PosB);} catch (Exception e) {result.CurrentPos = -1;return result;}result.Add(param.Index, Data.trim());}}result.CurrentPos = LastPos;return result;} catch (Exception e) {e.printStackTrace();result.CurrentPos = -1;return result;}}/** * 解析匹配表达式 * * * @param vMatchRule * @return */private static ArrayList<SubStrParam> GetParamList(String vMatchRule) {ArrayList<SubStrParam> List = new ArrayList<SubStrParam>();if (vMatchRule.length() < 1)return List;try {String StrIndexA = "{@{";String StrIndexB = "}";int PosA = vMatchRule.indexOf(StrIndexA);int PosB = 0;String IndexA = "";if (PosA > -1) {IndexA = vMatchRule.substring(0, PosA);SubStrParam param = new SubStrParam();param.isIndex = true;param.Index = IndexA;param.Point = -1;List.add(param);} else {List.clear();return List;}while (PosA > -1) {PosA += StrIndexA.length();PosB = vMatchRule.indexOf(StrIndexB, PosA);if (PosB > -1) {String VarName = vMatchRule.substring(PosA, PosB);SubStrParam param = new SubStrParam();param.isIndex = false;param.Index = VarName;param.Point = -1;List.add(param);PosB += StrIndexB.length();PosA = vMatchRule.indexOf(StrIndexA, PosB);if (PosA < 0) {IndexA = vMatchRule.substring(PosB, vMatchRule.length());SubStrParam param1 = new SubStrParam();param1.isIndex = true;param1.Index = IndexA;param1.Point = -1;List.add(param1);break;} else {IndexA = vMatchRule.substring(PosB, PosA);SubStrParam param1 = new SubStrParam();param1.isIndex = true;param1.Index = IndexA;param1.Point = -1;List.add(param1);}} else {List.clear();return List;}}return List;} catch (Exception e) {e.printStackTrace();return List;}}public static String ReadFile(String FileName) {try {FileReader fr = new FileReader(FileName);BufferedReader br = new BufferedReader(fr);try {StringBuffer buff = new StringBuffer();String record = new String();while (((record = br.readLine()) != null)) {buff.append(record);}return buff.toString();} finally {br.close();fr.close();}} catch (Exception e) {e.printStackTrace();return "";}}public static void SaveFile(String FileName, String Content) {try {FileWriter fw = new FileWriter(FileName);PrintWriter out = new PrintWriter(fw);try {out.println(Content);} finally {out.close();fw.close();}} catch (Exception e) {e.printStackTrace();}}public static String GetSubmit(String Content) {try {int Pos = 0;while (Pos > -1) {Pos = Content.indexOf("<", Pos);if (Pos > -1) {Pos++;String Temp = "";while (Pos < Content.length()&& (Temp = Content.substring(Pos, Pos + 1)) == " ") {Pos++;}if (Pos < (Content.length() - "input".length())) {Temp = Content.substring(Pos, Pos + "input".length());if (Temp.equalsIgnoreCase("input")) {int PosB = Content.indexOf(">", Pos);if (PosB > -1) {Temp = Content.substring(Pos, PosB);System.out.println(Temp);}}}}}return "";} catch (Exception e) {e.printStackTrace();return "";}}public static String stripNonValidXMLCharacters(String instr) {StringBuffer outstr = new StringBuffer(); // Used to hold the output.char current; // Used to reference the current character.if (instr == null || ("".equals(instr)))return ""; // vacancy test.for (int i = 0; i < instr.length(); i++) {current = instr.charAt(i); // NOTE: No IndexOutOfBoundsException// caught// here; it should not happen.if ((current == 0x9) || (current == 0xA) || (current == 0xD)|| ((current >= 0x20) && (current <= 0xD7FF))|| ((current >= 0xE000) && (current <= 0xFFFD))|| ((current >= 0x10000) && (current <= 0x10FFFF)))outstr.append(current);}return outstr.toString();}public static int parseInt(String str) {int res = 0;try {res = Integer.parseInt(str);} catch (Exception e) {// System.out.println("parseInt error : =0");}return res;}public static int parseInt(String str, int defaultValue) {int res = 0;try {res = Integer.parseInt(str);} catch (Exception e) {res = defaultValue;// System.out.println("parseInt error : ="+defaultValue);}return res;}public static double parseDouble(String str) {double res = 0.0;try {res = Double.parseDouble(str);} catch (Exception e) {// System.out.println("parseDouble error : =0.0");}return res;}public static double parseDouble(String str, double defaultValue) {double res = 0.0;try {res = Double.parseDouble(str);} catch (Exception e) {res = defaultValue;// System.out.println("parseDouble error : ="+defaultValue);}return res;}public static String eraseHtmlTags(String str, String space) {String res = null;int pos1 = str.indexOf("<");int pos2 = str.indexOf(">") + 1;int pose = str.length();if ((pos1 > -1) && (pos2 > -1) && (pos1 < pos2)) {str = str.substring(0, pos1).trim() + space+ str.substring(pos2, pose).trim();res = eraseHtmlTags(str, space);} else {res = str;}return res;}public static String eraseHtmlTags(String str) {String space = " ";String res = null;int pos1 = str.indexOf("<");int pos2 = str.indexOf(">");int pose = str.length();if ((pos1 > -1) && (pos2 > -1) && (pos1 < pos2)) {if (pos1 == 0) {str = str.substring(pos2 + 1, pose).trim();} else if (pos2 == pose - 1) {str = str.substring(0, pos1).trim();} else {str = str.substring(0, pos1).trim()+ str.substring(pos2 + 1).trim();}res = eraseHtmlTags(str);} else {res = str;}return res;}public static String str2Number(String szFloat) {String result = szFloat.replace(",", "");if (result.trim().length() < 1)return "";String retSzFloat = "";int nFind = 0;boolean ndot = false;for (int i = 0; i < result.length(); i++) {if ((result.charAt(i) <= '9' && result.charAt(i) >= '0')|| (result.charAt(i) == '.' && !ndot)) {if (result.charAt(i) == '.')ndot = true;nFind = 1;Character tt = result.charAt(i);retSzFloat += tt.toString();} else if (nFind == 1)break;}if (retSzFloat.length() > 0 && retSzFloat.charAt(0) == '.')retSzFloat = "0" + retSzFloat;if (retSzFloat.length() > 0&& retSzFloat.charAt(retSzFloat.length() - 1) == '.')retSzFloat = retSzFloat.substring(0, retSzFloat.length() - 1);if (retSzFloat.matches("^(-?\\d+)(\\.\\d+)?$")) {return retSzFloat;}return "";}private static int FNVHash1(String data) {final int p = 16777619;int hash = (int) 2166136261L;for (int i = 0; i < data.length(); i++)hash = (hash ^ data.charAt(i)) * p;hash += hash << 13;hash ^= hash >> 7;hash += hash << 3;hash ^= hash >> 17;hash += hash << 5;return hash;}public static long getHashCode(String data) {long hash = data.hashCode();long hash1 = hash << 32;int hash2 = FNVHash1(data);hash2 = Math.abs(hash2);long hash3 = hash1 | hash2;return hash3;}public static void logInfo(String msg) {System.out.println("util.loginfo: " + msg);log.info(msg);}public static void logError(Exception e) {if (e == null) {System.out.println("unknown error");log.error("unknown error");return;}try {StackTraceElement[] s = e.getStackTrace();StringBuffer em = new StringBuffer(e.getMessage());if (s != null) {for (int i = 0; i < s.length; i++) {StackTraceElement st = s[i];em.append("\t\t").append(st.toString()).append("\r\n");}}System.out.println(em.toString());log.error(em.toString());} catch (Exception e1) {e1.printStackTrace();}}public static String map2PackageStr(HashMap<String, String> map)throws Exception {StringBuilder result = new StringBuilder();for (Map.Entry<String, String> m : map.entrySet()) {String key = m.getKey();String value = m.getValue();String ekey = encoder(key);String evalue = encoder(value);String add = ekey + ":" + evalue;if (result.length() > 0)result.append("," + add);elseresult.append(add);}return result.toString();}public static String encoder(String vstr) throws Exception {if (vstr == null)return "";String str = vstr.trim();if (str.trim().length() < 1)return "";String result = (new sun.misc.BASE64Encoder()).encode(str.getBytes("UTF-8"));result = result.replace("+", "_");result = result.replace("=", ".");return result;}public static String decoder(String vstr) throws Exception {if (vstr == null)return "";String str = vstr.trim();if (str.length() < 1)return "";str = str.replace("_", "+");str = str.replace(".", "=");BASE64Decoder decoder = new BASE64Decoder();byte[] b = decoder.decodeBuffer(str);return new String(b, "UTF-8");}public static HashMap<String, String> packageStr2map(String vstr)throws Exception {HashMap<String, String> map = new HashMap<String, String>();if (vstr == null || vstr.trim().length() < 1)return map;String[] valueList = vstr.trim().split(",");for (int i = 0; i < valueList.length; i++) {String value = valueList[i].trim();if (value.length() > 0) {String[] values = value.split(":");if (values.length == 2) {map.put(decoder(values[0]), decoder(values[1]));} else if (values.length == 1) {map.put(decoder(values[0]), "");}}}return map;}public static String eraseStringTag(String str) {String contentHtml = "";String[] subContents = str.split(",");for (int t = 0; t < subContents.length; t++) {String tempStr = subContents[t];contentHtml += tempStr;}return contentHtml;}public static String eraseHtmlContent(String str) {String contentHtml = "";str = str.replace(":", ":").replace("<BR>", "BEEND");System.out.println(str);str = eraseHtmlTags(str).replace("BEEND", "<BR>");System.out.println(str);String[] subContents = str.split(":");for (int t = 0; t < subContents.length; t++) {String tempStr = subContents[t];if (tempStr.indexOf("<BR>") > -1) {while (tempStr.indexOf("<BR>") != tempStr.lastIndexOf("<BR>")) {tempStr = tempStr.substring(0, tempStr.indexOf("<BR>"))+ tempStr.substring(tempStr.indexOf("<BR>") + 4);}}contentHtml += tempStr;if (t < subContents.length - 1) {contentHtml += ":";}}return contentHtml;}public static String eraseHtmlScript(String str, String[] regs) {for (int t = 0; t < regs.length; t++) {String beginStr = "<" + regs[t];String endStr = "</" + regs[t] + ">";if (str.indexOf(beginStr) > -1 && str.indexOf(endStr) > -1) {str = str.substring(0, str.indexOf(beginStr))+ str.substring(str.indexOf(endStr)+ (regs[t].length() + 3));while (str.indexOf(beginStr) != str.lastIndexOf(beginStr)) {str = str.substring(0, str.indexOf(beginStr))+ str.substring(str.indexOf(endStr)+ (regs[t].length() + 3));}}}return eraseHtmlTags(str);}/*** * 发送异常邮件 * * @param owner * 异常产生地---类或脚本 * @param content * 异常内容 * @param ip * 异常产生ip * @param description * 异常附件描述信息 */public static void sendErrorMail(String owner, Exception ex,String description) {String date = sdf.format(new Date());String content = getExceptionInfo(ex);String message = "";try {InetAddress addr = InetAddress.getLocalHost();String ip = addr.getHostAddress();message = "<html><body><b>产生异常的类或脚本:</b><br>" + owner+ "<br><br><b>异常内容:</b><br>" + content+ "<br><br><b>异常描述:</b><br>" + description+ "<br><br><b>产生异常的IP地址:</b><br>" + ip+ "<br><br><b>异常产生时间:</b><br>" + date + "</body></html>";message = URLEncoder.encode(encoder(message), "UTF-8");if (null == emailAddress) {getEmailAddress();}log.error("emailAddress:" + emailAddress);if (null != emailAddress) {HttpUtils.postUrlContent(emailAddress,"title=CRAWLER ERROR&message=" + message);}} catch (Exception e) {e.printStackTrace();}}private static void getEmailAddress() {if (null == emailAddress) {File file = new File("./log4j.properties");if (!file.exists() && !file.isFile()) {file = new File("./conf/log4j.properties");}InputStream in = null;try {in = new FileInputStream(file);Properties p = new Properties();p.load(in);emailAddress = p.getProperty("email.address");} catch (Exception e) {e.printStackTrace();} finally {try {if (null != in) {in.close();}} catch (IOException e) {e.printStackTrace();}}}}private static String getExceptionInfo(Exception e) {if (e == null) {System.out.println("unknown error");return "unknown error";}try {StackTraceElement[] s = e.getStackTrace();StringBuffer em = new StringBuffer(e.getMessage());if (s != null) {for (int i = 0; i < s.length; i++) {StackTraceElement st = s[i];em.append("<br>").append(st.toString()).append("<br>");}}return em.toString();} catch (Exception e1) {e1.printStackTrace();}return "=======error=======";}public static void main(String[] args) {String str = "<aa>dddd<!--this is aldo test!!!!--><ccc>bbb<rrr>tt<yy>";System.out.println(eraseHtmlScript3(str));}public static String eraseHTMLTags(String inStr) {if (inStr == null)return "";inStr = Util.eraseHtmlTags(inStr);inStr = inStr.replaceAll("’", "'").replaceAll(" ", " ");inStr = inStr.replaceAll("™", "").replaceAll("™", "").replaceAll("®", "").replaceAll("³", "").replaceAll("®", "").replaceAll("™", "");inStr = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(inStr).trim();return inStr;}public static String eraseHtmlScript3(String str) {String beginStr = "<!--";String endStr = "-->";if (str.indexOf(beginStr) > -1 && str.indexOf(endStr) > -1) {str = str.substring(0, str.indexOf(beginStr))+ str.substring(str.indexOf(endStr) + 3);while (str.indexOf(beginStr) != str.lastIndexOf(beginStr)) {str = str.substring(0, str.indexOf(beginStr))+ str.substring(str.indexOf(endStr) + 3);}}return eraseHtmlScript3(str);}}
?