项目中的一个工具类,有点乱。

项目中的一个工具类,有点乱。

主要是和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;
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值