/**
 * 文件名：StringUtil.java
 * 描述：字符串工具类
 * 包名：cn.com.kmlt.monstarBase.utils.string
 * 作者：WENJQ
 * 创建日期：2016年05月26日
 * 
 */
package com.mgq.base.utils.string;

import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;


public class StringUtil {
	private static final String TAG = "StringUtil";

	/**
	 * 邮箱验证的正则表达式
	 */
	private static Pattern emailPattern = Pattern
			.compile("^([\\w-\\.]+)@((\\[[0-9]{1,3}"
					+ "\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))"
					+ "([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");

	/**
	 * 判断str1和str2是否相同
	 * 
	 * @param str1
	 *            str1
	 * @param str2
	 *            str2
	 * @return true or false
	 */
	public static boolean equals(String str1, String str2) {
		return str1 == str2 || str1 != null && str1.equals(str2);
	}

	/**
	 * 判断str1和str2是否相同(不区分大小写)
	 * 
	 * @param str1
	 *            str1
	 * @param str2
	 *            str2
	 * @return true or false
	 */
	public static boolean equalsIgnoreCase(String str1, String str2) {
		return str1 != null && str1.equalsIgnoreCase(str2);
	}

	/**
	 * 
	 * 判断字符串str1是否包含字符串str2
	 * 
	 * @param str1
	 *            源字符串
	 * @param str2
	 *            指定字符串
	 * @return true源字符串包含指定字符串，false源字符串不包含指定字符串
	 */
	public static boolean contains(String str1, String str2) {
		return str1 != null && str1.contains(str2);
	}

	/**
	 * 
	 * 判断字符串是否为空，为空则返回一个空值，不为空则返回原字符串
	 * 
	 * @param str
	 *            待判断字符串
	 * @return 判断后的字符串
	 */
	public static String getString(String str) {
		return str == null ? "" : str;
	}

	/**
	 * 验证字符串是否符合email格式
	 * 
	 * @param email
	 *            需要验证的字符串
	 * @return 验证其是否符合email格式，符合则返回true,不符合则返回false
	 */
	public static boolean isEmail(String email) {
		// 通过正则表达式验证email是否合法
		return email != null && emailPattern.matcher(email).matches();
	}

	/**
	 * 验证字符串是否为数字
	 * 
	 * @param str
	 *            需要验证的字符串
	 * @return 不是数字返回false，是数字就返回true
	 */
	public static boolean isNumeric(String str) {
		return str != null && str.matches("[0-9]*");
	}

	/**
	 * 计算位数
	 * 
	 * @param str
	 * @return
	 */
	public static int calculatePlaces(String str) {
		int m = 0;
		char arr[] = str.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			char c = arr[i];
			if ((c >= 0x0391 && c <= 0xFFE5)) // 中文字符
			{
				m = m + 2;
			} else // 英文字符 和 数字
			{
				m = m + 1;
			}
		}
		return m;
	}


	/**
	 * 去除int类型的数字字符串中多余的0
	 * @param number
	 * @return
	 */
	public static String getPrettyIntNumber(String number){
		if (number == null || number.isEmpty())
			return number;
		String plainString = BigDecimal.valueOf(Integer.parseInt(number))
				.stripTrailingZeros().toPlainString();
		return plainString;
	}

	/**
	 * 去除double类型的数字字符串中多余的0
	 * @param number
	 * @return
	 */
	public static String getPrettyDoubleNumber(String number){
		if (number == null || number.isEmpty())
			return number;
		String plainString = BigDecimal.valueOf(Double.parseDouble(number))
				.stripTrailingZeros().toPlainString();
		if (plainString.equals("0.0")){
			plainString = "0";
		}
		return plainString;
	}

	/**
	 * 在线获取不同大小的图片地址
	 * 
	 * @param type
	 *            :1-原图，2-大图，3-中图，4-小图
	 * @author wy
	 * @return 加入了m,b,s标示符的地址字符串
	 */
	public static String getImagePath(String urlString, int type) {
		if (urlString != null && !urlString.equals("")) {
			StringBuffer sb = new StringBuffer(urlString);
			int index = urlString.lastIndexOf("/");
			if (index > -1) {
				
				index = index+1;

				switch (type) {
				case 2:
					sb.insert(index, "b");
					break;
				case 3:
					sb.insert(index, "m");
					break;
				case 4:
					sb.insert(index, "s");
					break;
				default:
					break;
				}
				return sb.toString();
			} else {
				return urlString;
			}
		} else {
			return urlString;
		}
	}

	/**
	 * 
	 * setTextColor:设置字体颜色，搜索关键字 颜色 高亮色. <br/>
	 * 
	 * @author ZhongYuzhi
	 * @param key
	 *            关键字
	 * @param name
	 *            全部
	 * @return style
	 * @since JDK 1.6
	 */
	public static SpannableStringBuilder setTextColor(String key, String name) {
		int start = name.indexOf(key);
		int end = start + key.length();
		SpannableStringBuilder style = new SpannableStringBuilder(name);
		if (start != -1) {

			style.setSpan(new ForegroundColorSpan(0xFF00A5CC), start, end,
					Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置 字体颜色
		}
		return style;
	}

	public static String listToString(List list, char separator) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < list.size(); i++) {
			sb.append(list.get(i));
			if (i < list.size() - 1) {
				sb.append(separator);
			}
		}
		return sb.toString();
	}

	public static String arrayToString(int[] array, char separator) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < array.length; i++) {
			sb.append(array[i]);
			if (i < array.length - 1) {
				sb.append(separator);
			}
		}
		return sb.toString();
	}

	public static String byte2HexString(byte[] bytes) {
		String ret = "";
		if (bytes != null) {
			// for (Byte b : bytes) {
			// ret += String.format("%02X", b.intValue() & 0xFF);
			// }
			for (int i = bytes.length - 1; i >= 0; i--) {
				Byte b = bytes[i];
				ret += String.format("%02X", b.intValue() & 0xFF);
			}
		}
		return ret;
	}

	public static String format(String format, Object... args) {
		return String.format(Locale.CHINA, format, args);
	}

	/**
	 * 将double类型转换为字符串，保留6位小数点
	 * */
	public static String formatDigit6(double digit) {
		return String.format(Locale.CHINA, "%.6f", digit);
	}

	/**
	 * 将double类型转换为字符串，保留 pos 位小数点
	 * */
	public static String formatDigit(double digit, int pos) {
		String format = "%." + Math.abs(pos) + "f";
		return String.format(Locale.CHINA, format, digit);
	}

	public static String encodeGBKToUTF8(String gbkStr) {
		String utf8Str = gbkStr;
		try {
			utf8Str = new String(gbkStr.getBytes("UTF-8"),"ISO-8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return utf8Str;
	}
}
