项目中的一个工具类,有点乱。
主要是和string相关的一些东西。
还有一些16进制相关。
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
import java.security.MessageDigest;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 工具类
*
* @author
*/
public class Util {
private static String SECURITYCODE = "securitycode";
/**
* @param input
* @return
*/
public static String ToDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
public String getRealPathFromURI(Context context,Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index
= cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
/**
* 检测String是否全是中文
*
* @param name
* @return
*/
public static boolean checkNameChese(String name) {
boolean res = true;
char[] cTemp = name.toCharArray();
for (int i = 0; i < name.length(); i++) {
if (!isChinese(cTemp[i])) {
res = false;
break;
}
}
return res;
}
/**
* 判定输入汉字
*
* @param c
* @return
*/
public static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
/**
* 生成安全校验码
*
* @param map
* @return
*/
public static String makeHashCode(Map<String, String> map) {
Object[] key_arr = map.keySet().toArray();
Arrays.sort(key_arr);
StringBuffer sb = new StringBuffer();
for (Object key : key_arr) {
sb.append(map.get(key));//hash=MD5(v2v1v3securitycode)
}
//排序后拼接的字符转进行加密算法
return MD5(sb.toString() + SECURITYCODE);
}
/**
* 获取手机系统版本
*
* @return
*/
public static int getAndroidSDKVersion() {
int version = 0;
try {
version = Integer.valueOf(android.os.Build.VERSION.SDK);
} catch (Exception e) {
e.printStackTrace();
}
return version;
}
//判断是否为手机号码//
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern
.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9])|(17[0,6,7,8])|(14[5,7]))\\d{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
/**
* MD5加密
*
* @param oldStr
* @return
*/
public static String MD5(String oldStr) {
String newStr = oldStr;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] b = md5.digest(oldStr.getBytes("utf-8"));
int i;
StringBuffer 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));
}
newStr = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return newStr;
}
/**
* 帖子计算时间
*
* @param createTime
* @return
*/
public static String postMakeTimeStr(String createTime) {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy/MM/dd HH:mm");
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date date = simpleDateFormat.parse(createTime);
Date nowDate = new Date();
int min = 60;
int hour = min * 60;
int hour24 = hour * 24;
int hour48 = hour24 * 2;
long cha = (nowDate.getTime() - date.getTime()) / 1000;
if (cha < min) { // 1分钟内 为刚刚
return "刚刚";
} else if (cha < hour) { // 一小时内 xx分钟
return (cha / (min)) + "分钟前";
} else if (cha < hour24) { // 24小时内 xx小时
return ((int) cha / hour) + "小时前";
} else if (cha < hour48) { // 48小时内 昨天
return simpleDateFormat.format(date);
/*
* String nowStr = simpleDateFormat.format(nowDate); String
* dateStr =
* nowStr.substring(0,nowStr.indexOf(" "))+" 00:00:00";
* if((simpleDateFormat
* .parse(dateStr).getTime()-date.getTime())<hour48){ return
* "昨天"; }else{ return createTime; }
*/
}
} catch (Exception e) {
e.printStackTrace();
}
return chengaDateStyle(createTime, "yyyy/MM/dd HH:mm:ss",
"yyyy/MM/dd HH:mm");
}
/**
* 得到屏幕高度
*
* @param windowManager
* @return
*/
public static int getHeight(WindowManager windowManager) {
DisplayMetrics metric = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(metric);
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
return height;
}
/**
* 改变日期格式
*
* @param date
* @param oldStyle
* @param newStyle
* @return
*/
public static String chengaDateStyle(String date, String oldStyle,
String newStyle) {
try {
SimpleDateFormat oldSdf = new SimpleDateFormat(oldStyle);
SimpleDateFormat newSdf = new SimpleDateFormat(newStyle);
date = newSdf.format(oldSdf.parse(date));
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* 根据年月日等到星期几
*
* @param startTime
* @return
*/
public static String getWeek(String startTime) {
String Week = "星期";
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 也可将此值当参数传进来
Calendar c = Calendar.getInstance();
try {
c.setTime(format.parse(startTime));
} catch (Exception e) {
e.printStackTrace();
}
switch (c.get(Calendar.DAY_OF_WEEK)) {
case 1:
Week += "日";
break;
case 2:
Week += "一";
break;
case 3:
Week += "二";
break;
case 4:
Week += "三";
break;
case 5:
Week += "四";
break;
case 6:
Week += "五";
break;
case 7:
Week += "六";
break;
default:
break;
}
return Week;
}
/**
* 判断list是否全是相同元素的
*
* @param list
* @return
*/
public static boolean hasSame(List<? extends Object> list) {
if (null == list)
return false;
return 1 == new HashSet<Object>(list).size();
}
/**
* 把日期Date转换成字符串
*
* @param dateString
* @return
*/
public static Date stringToDate(String dateString) {
ParsePosition position = new ParsePosition(0);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss");
Date dateValue = simpleDateFormat.parse(dateString, position);
return dateValue;
}
/**
* 获取某一天在这个一周是星期几
*
* @param date
* @return
*/
public static String getWeekday(String date) {// 必须yyyy-MM-dd
SimpleDateFormat sd = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat sdw = new SimpleDateFormat("E");
Date d = null;
String num = "一";
try {
d = sd.parse(date);
String zhou = sdw.format(d);
num = zhou.substring(zhou.length() - 1, zhou.length());
} catch (Exception e) {
e.printStackTrace();
}
return num;
}
/**
* @param oldTime 较小的时间
* @param newTime 较大的时间 (如果为空 默认当前时间 ,表示和当前时间相比)
* @return -1 :同一天. 0:昨天 . 1 :至少是前天.
* @throws ParseException 转换异常
* @author .
*/
public static int isYeaterday(Date oldTime, Date newTime)
throws ParseException {
if (newTime == null) {
newTime = new Date();
}
// 将下面的 理解成 yyyy-MM-dd 00:00:00 更好理解点
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String todayStr = format.format(newTime);
Date today = format.parse(todayStr);
// 昨天 86400000=24*60*60*1000 一天
if ((today.getTime() - oldTime.getTime()) > 0
&& (today.getTime() - oldTime.getTime()) <= 86400000) {
return 0;
} else if ((today.getTime() - oldTime.getTime()) <= 0) { // 至少是今天
return -1;
} else { // 至少是前天
return 1;
}
}
/**
* 计算还剩多少天
*
* @param time1
* @param time2
* @return
*/
public static long getQuot(String time1, String time2) {
long quot = 0;
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date1 = ft.parse(time1);
Date date2 = ft.parse(time2);
quot = date1.getTime() - date2.getTime();
quot = quot / 1000 / 60 / 60 / 24;
} catch (ParseException e) {
e.printStackTrace();
}
return quot;
}
public static long gettimes(String OrderTime, String servertime) {
Log.w("String", OrderTime + " " + servertime);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
long servertimelong = Long.parseLong(servertime);
Date d3 = df.parse(OrderTime);
Date d = new Date(servertimelong);
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String date = format.format(d);
Log.w("Util.servertime", servertime);
Date d1 = df.parse(date);
// Calendar ca = Calendar.getInstance();
// ca.setTime(d3);
// ca.add(ca.DATE, 1);// 30为增加的天数,可以改变的
// d3 = ca.getTime();
//String backTime = format.format(d3);
String backTime = format.format(d3.getTime() + 1000 * 60 * 60 * 2);
Date d2 = df.parse(backTime);
long diff = d2.getTime() - d1.getTime();
long days = diff / 1000;
return days;
} catch (Exception e) {
}
return 0;
}
public static long gettimes7(String OrderTime, String servertime) {
Log.w("String", OrderTime + " " + servertime);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long servertimelong = Long.parseLong(servertime);
try {
Date d3 = df.parse(OrderTime);
Date d = new Date(servertimelong);
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String date = format.format(d);
Date d1 = df.parse(date);
// Calendar ca = Calendar.getInstance();
// ca.setTime(d3);
// ca.add(ca.DATE, 7);// 7为增加的天数,可以改变的
// d3 = ca.getTime();
//String backTime = format.format(d3);
String backTime = format.format(d3.getTime() + 1000 * 60 * 60 * 2);
Date d2 = df.parse(backTime);
long diff = d2.getTime() - d1.getTime();
long days = diff / 1000;
return days;
} catch (Exception e) {
}
return 0;
}
/**
* 字符串转换成十六进制字符串
*/
public static String str2HexStr(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
}
return sb.toString();
}
/**
* 把16进制字符串转换成字节数组
*
* @param hex hexString
* @return byte[]
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
private static int toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
/**
* byte[]数组转换成十六进制字符串
*
* @param bArray byte[]
* @return HexString
*/
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i < bArray.length; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
/**
* byte[]数组转成十六进制字符串
*
* @param b byte[]
* @return HexString
*/
public static String toHexString1(byte[] b) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < b.length; ++i) {
buffer.append(toHexString1(b[i]));
}
return buffer.toString();
}
public static String toHexString1(byte b) {
String s = Integer.toHexString(b & 0xFF);
if (s.length() == 1) {
return "0" + s;
} else {
return s;
}
}
/**
* 十六进制字符串转换成字符串
*
* @param hexStr hexString
* @return String
*/
public static String hexStr2Str(String hexStr) {
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
/**
* 十六进制字符串转换字符串
*
* @param s HexString
* @return String
*/
public static String toStringHex(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}
}