package com.linju.android_property.utils;
import java.io.InputStream;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.linju.android_property2.R;
import android.content.Context;
import android.content.res.Resources;
public class StringUtils {
private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
private static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
public final static String EMPTY = "";
/**
* 格式化日期字符串
*
* @param date
* @param pattern
* @return
*/
public static String formatDate(Date date, String pattern) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
/**
* 格式化日期字符串
*
* @param date
* @return 例如2011-3-24
*/
public static String formatDate(Date date) {
return formatDate(date, DEFAULT_DATE_PATTERN);
}
/**
* 获取当前时间 格式为yyyy-MM-dd 例如2011-07-08
*
* @return
*/
public static String getDate() {
return formatDate(new Date(), DEFAULT_DATE_PATTERN);
}
/**
* 格式化时间 格式为hh:mm:ss 例如:16:06:54
*
* @param date
* @return
*/
public static String formatTime(Date date) {
return formatDate(date, DEFAULT_TIME_PATTERN);
}
/**
* 获取当前时间 格式为yyyy-MM-dd hh:mm:ss 例如2011-11-30 16:06:54
*
* @return
*/
public static String getDateTime() {
return formatDate(new Date(), DEFAULT_DATETIME_PATTERN);
}
/**
* 格式化日期时间字符串
*
* @param date
* @return 例如2011-11-30 16:06:54
*/
public static String formatDateTime(Date date) {
return formatDate(date, DEFAULT_DATETIME_PATTERN);
}
public static String join(final ArrayList<String> array, String separator) {
StringBuffer result = new StringBuffer();
if (array != null && array.size() > 0) {
for (String str : array) {
result.append(str);
result.append(separator);
}
result.delete(result.length() - 1, result.length());
}
return result.toString();
}
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
/**
* 1. 处理特殊字符 2. 去除后缀名带来的文件浏览器的视图凌乱(特别是图片更需要如此类似处理,否则有的手机打开图库,全是我们的缓存图片)
*
* @param url
* @return
*/
public static String replaceUrlWithPlus(String url) {
if (url != null) {
return url.replaceAll("http://(.)*?/", "")
.replaceAll("[.:/,%?&=]", "+").replaceAll("[+]+", "+");
}
return null;
}
/**
* 验证手机号码
*
* @param mobiles
* 手机号码, 移动、联通、电信运营商的号码段
* <p>
* <b>移动号段:</b>134、135、136、137、138、139、147、150、151、152、157、158、
* 159、182、183、187、188
* </p>
* <p>
* <b>联通号段:</b>130、131、132、145、155、156、185、186
* </p>
* <p>
* <b>电信号段:</b>133、153、180、181、189
* </p>
* @return 验证成功返回true,验证失败返回false
*/
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern
.compile("^((13[0-9])|(14[5,7])|(15[^4,\\D])|(18[^4,\\D]))\\d{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
/**
* 验证固定电话号码
*
* @param phone
* 电话号码,格式:国家(地区)电话代码 + 区号(城市代码) + 电话号码,如:+8602085588447
* <p>
* <b>国家(地区) 代码 :</b>标识电话号码的国家(地区)的标准国家(地区)代码。它包含从 0 到 9
* 的一位或多位数字, 数字之后是空格分隔的国家(地区)代码。
* </p>
* <p>
* <b>区号(城市代码):</b>这可能包含一个或多个从 0 到 9 的数字,地区或城市代码放在圆括号——
* 对不使用地区或城市代码的国家(地区),则省略该组件。
* </p>
* <p>
* <b>电话号码:</b>这包含从 0 到 9 的一个或多个数字
* </p>
* @return 验证成功返回true,验证失败返回false
*/
public static boolean checkPhone(String phone) {
String regex = "(\\+\\d+)?(\\d{3,4}\\-?)?\\d{7,8}$";
return Pattern.matches(regex, phone);
}
/**
* 验证邮箱地址
*
* @param email
* @return
*/
public static boolean isEmail(String email) {
String str = "^([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})?$";
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(email);
return m.matches();
}
public static String toMd5(String plainText) {
StringBuffer buf = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
System.out.println("result: " + buf.toString());// 32位的加密
System.out.println("result: " + buf.toString().substring(8, 24));// 16位的加密
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return buf.toString();
}
// public static String trim(String str) {
// if (IsUtil.isNullOrEmpty(str)) {
// return "";
// }
// return str.trim();
// }
//
// /** 将中文转换成unicode编码 */
// public static String gbEncoding(final String gbString) {
// char[] utfBytes = gbString.toCharArray();
// String unicodeBytes = "";
// for (char utfByte : utfBytes) {
// String hexB = Integer.toHexString(utfByte);
// if (hexB.length() <= 2) {
// hexB = "00" + hexB;
// }
// unicodeBytes = unicodeBytes + "\\u" + hexB;
// }
// //System.out.println("unicodeBytes is: " + unicodeBytes);
// return unicodeBytes;
// }
//
// /** 将unicode编码转换成中�?*/
// public static String decodeUnicode(final String dataStr) {
// int start = 0;
// int end = 0;
// final StringBuffer buffer = new StringBuffer();
// while (start > -1) {
// end = dataStr.indexOf("\\u", start + 2);
// String charStr = "";
// if (end == -1) {
// charStr = dataStr.substring(start + 2, dataStr.length());
// } else {
// charStr = dataStr.substring(start + 2, end);
// }
// char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串�?
// buffer.append(new Character(letter).toString());
// start = end;
// }
// //System.out.println(buffer.toString());
// return buffer.toString();
// }
/**
* 获取raw的文件内容
* @param resources
* @param res
* @return
*/
public static String GetRaw(Resources resources, int res) {
String content;
InputStream is = null;
try {
is = resources.openRawResource(res);
byte buffer[] = new byte[is.available()];
is.read(buffer);
content = new String(buffer);
} catch (Exception e) {
content = null;
} finally {
if (is != null) {
try {
is.close();
} catch (Exception e) {
}
}
}
return content;
}
}