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);
			else
				result.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("&#146;", "'").replaceAll("&nbsp;", " ");
		inStr = inStr.replaceAll("&#153;", "").replaceAll("&#8482;", "")
				.replaceAll("&#174;", "").replaceAll("&#179;", "").replaceAll(
						"&reg;", "").replaceAll("&trade;", "");
		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);
	}
}

猜你喜欢

转载自canhai.iteye.com/blog/1779212