Android开发中非常实用的工具类

刚刚假期归来,由于前一段时间加班了一个月,所以假期就实实在在的放松了一下,小工这个假期都快玩疯了,导致上班的时候感觉好累,你们有没有这种感觉???
精力有限,分享无限,作为码农的我们,利用有限的精力去积累工作以外的技术点,这样才能迅速的成长。最近一直在看各种各样的博客,有身边朋友的,有各个平台的,一直在寻找着出项目之外的技术点,积累分享,我们不是一个人在行走在简书的道路上,大家一起分享,一起走向技术大牛(扯的有点远了)。


tooopen_sy_202706818574.jpg

现在贴一下工作当中用到的非常实用的工具类,有了它们让你的代码看起来更加的简洁美观,让你感觉不是在在码砖,而是在进行艺术创造。。。

/**
     * 电话号码验证
     *
     * @param str
     * @return 验证通过返回true
     */
    public static boolean isPhone(String str) {
        Pattern p1 = null, p2 = null,p3=null;
        Matcher m = null;
        boolean b = false;
        p1 = Pattern.compile("^[0][1-9][0-9]{1,2}[0-9]{5,10}$");  // 验证带区号的
        p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$");         // 验证没有区号的
        p3 = Pattern.compile("^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$");//验证带区号和带“—”
        if (str.length()<9&&str.length()>=7){
            m = p2.matcher(str);
            b = m.matches();
        }else if (str.length()>9&&str.length()<13) {
        m = p1.matcher(str);
        b = m.matches();
        }
        else {
            m=p3.matcher(str);
            b=m.matches();
        }
        return b;
    }
/*
*手机号码正则表达式
 */
    public static boolean isMobileNO(String mobiles) {
        ^((13[0-9])|(15[^4,\D])|(18[0-9])|(14[5,7]))\d{8}$
      Pattern p = Pattern.compile("^1([358]\\d|4[57]|7[^249])\\d{8}$");
       Matcher m = p.matcher(mobiles);
        return true ;

    }
  /**
     * 验证邮箱
     *
     * @param email
     * @return
     */
    public static boolean isEmail(String email) {
        boolean flag = false;
        try {
            String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

输入框emojit表情判断,参数是string类型的字符串

  /** * 检测是否有emoji表情 * @param source * @return */
    public static boolean containsEmoji(String source) {
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
                return true;
            }
        }
        return false;
    }

去除"-",参数是string类型的字符串

 public static String getValues(String str){
        String[] s = str.split("-");
        String value = "";
        for (int i=0;i<s.length;i++){
            value += s[i];
        }
        return value;
    }
 /*将字符串转为时间戳*/
    public static long getStringToDate(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = new Date();
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date.getTime() / 1000;
    }

日期时间显示为星期

//获取时间戳转化为时间按星期显示,参数是long类型的时间戳
public static String getInformDate(long time) {
        String date = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String min = sdf.format(new Date(time * 1000));
        long hour = time / 3600 / 24;
        int day = (int) hour % 7;
        String week = "";
        switch (day) {
            case 0:
                week = "星期五";
                break;
            case 1:
                week = "星期六";
                break;
            case 2:
                week = "星期日";
                break;
            case 3:
                week = "星期一";
                break;
            case 4:
                week = "星期二";
                break;
            case 5:
                week = "星期三";
                break;
            case 6:
                week = "星期四";
                break;
            default:
                break;
        }
        date = week + " " + min;
        return date;

    }
 //根据时间戳计算显示不同的日期时间,参数是long类型的时间戳
    public static String GetGoodTime2(long time) {
        String ti;
        Date curentDate = new Date();
        Date myDate = new Date(time);
        SimpleDateFormat dfs = new SimpleDateFormat("dd");
        String nowday=dfs.format(curentDate);
        String lastday=dfs.format(myDate);
        long subTime = (curentDate.getTime() - myDate.getTime())/1000;
        if (subTime<60){
            ti="刚刚";
        }else if (subTime<60*60){
            ti=(subTime/60)+"分钟前";
        }else if (subTime <60 * 60*24&&Integer.parseInt(nowday)==Integer.parseInt(lastday)){
            SimpleDateFormat df = new SimpleDateFormat("HH:mm");
            ti = "今天" + df.format(myDate);
        }
        else if (subTime <60 * 60 * 24*2&&Integer.parseInt(nowday)!=Integer.parseInt(lastday)) {
            if (Integer.parseInt(nowday)-Integer.parseInt(lastday)==1||Integer.parseInt(lastday)-Integer.parseInt(nowday)>10||Integer.parseInt(nowday)==1){
                SimpleDateFormat df = new SimpleDateFormat("HH:mm");
                ti = "昨天" + df.format(myDate);
            }else {
                SimpleDateFormat df = new SimpleDateFormat("MM-dd HH:mm");
                ti=df.format(myDate);
            }
        }else if (subTime<60*60*24*365){
            SimpleDateFormat df = new SimpleDateFormat("MM-dd HH:mm");
            ti=df.format(myDate);
        }else {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            ti = df.format(myDate);
        }
        return ti;

    }

目前最全最严格的身份证验证,参数是String类型的身份证号字符串

  /**
     * 身份证号码正则表达式
     */
     public static boolean isIDCard(String idNum)  throws ParseException {
         String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4",
                 "3", "2" };
         String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7",
                 "9", "10", "5", "8", "4", "2" };
         String Ai = "";
         // ================ 号码的长度 15位或18位 ================
         if (idNum.length() != 15 && idNum.length() != 18) {
             return false;
         }
         // =======================(end)========================

         // ================ 数字 除最后以为都为数字 ================
         if (idNum.length() == 18) {
             Ai = idNum.substring(0, 17);
         } else if (idNum.length() == 15) {
             Ai = idNum.substring(0, 6) + "19" + idNum.substring(6, 15);
         }
         if (isNumeric(Ai) == false) {
             return false;
         }
         // =======================(end)========================

         // ================ 出生年月是否有效 ================
         String strYear = Ai.substring(6, 10);// 年份
         String strMonth = Ai.substring(10, 12);// 月份
         String strDay = Ai.substring(12, 14);// 月份
         if (isDataFormat(strYear + "-" + strMonth + "-" + strDay) == false) {
             return false;
         }
         GregorianCalendar gc = new GregorianCalendar();
         SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
         if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150
                 || (gc.getTime().getTime() - s.parse(
                 strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
             return false;
         }
         if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
             return false;
         }
         if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
             return false;
         }
         // =====================(end)=====================

         // ================ 地区码时候有效 ================
         Hashtable h = GetAreaCode();
         if (h.get(Ai.substring(0, 2)) == null) {
             return false;
         }
         // ==============================================

         // ================ 判断最后一位的值 ================
         int TotalmulAiWi = 0;
         for (int i = 0; i < 17; i++) {
             TotalmulAiWi = TotalmulAiWi
                     + Integer.parseInt(String.valueOf(Ai.charAt(i)))
                     * Integer.parseInt(Wi[i]);
         }
         int modValue = TotalmulAiWi % 11;
         String strVerifyCode = ValCodeArr[modValue];
         Ai = Ai + strVerifyCode;

         if (idNum.length() == 18) {
             if (Ai.equalsIgnoreCase(idNum) == false) {
                 return false;
             }
         } else {
             return true;
         }
         return true;

     }

    /**
     * 功能:判断字符串是否为数字
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        if (isNum.matches()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 功能:设置地区编码
     * @return Hashtable 对象
     */
    private static Hashtable GetAreaCode() {
        Hashtable hashtable = new Hashtable();
        hashtable.put("11", "北京");
        hashtable.put("12", "天津");
        hashtable.put("13", "河北");
        hashtable.put("14", "山西");
        hashtable.put("15", "内蒙古");
        hashtable.put("21", "辽宁");
        hashtable.put("22", "吉林");
        hashtable.put("23", "黑龙江");
        hashtable.put("31", "上海");
        hashtable.put("32", "江苏");
        hashtable.put("33", "浙江");
        hashtable.put("34", "安徽");
        hashtable.put("35", "福建");
        hashtable.put("36", "江西");
        hashtable.put("37", "山东");
        hashtable.put("41", "河南");
        hashtable.put("42", "湖北");
        hashtable.put("43", "湖南");
        hashtable.put("44", "广东");
        hashtable.put("45", "广西");
        hashtable.put("46", "海南");
        hashtable.put("50", "重庆");
        hashtable.put("51", "四川");
        hashtable.put("52", "贵州");
        hashtable.put("53", "云南");
        hashtable.put("54", "西藏");
        hashtable.put("61", "陕西");
        hashtable.put("62", "甘肃");
        hashtable.put("63", "青海");
        hashtable.put("64", "宁夏");
        hashtable.put("65", "新疆");
        hashtable.put("71", "台湾");
        hashtable.put("81", "香港");
        hashtable.put("82", "澳门");
        hashtable.put("91", "国外");
        return hashtable;
    }

    /**验证日期字符串是否是YYYY-MM-DD格式
     * @param str
     * @return
     */
    public static boolean isDataFormat(String str){
        boolean flag=false;
        //String regxStr="[1-9][0-9]{3}-[0-1][0-2]-((0[1-9])|([12][0-9])|(3[01]))";
        String regxStr="^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$";
        Pattern pattern1=Pattern.compile(regxStr);
        Matcher isNo=pattern1.matcher(str);
        if(isNo.matches()){
            flag=true;
        }
        return flag;
    }

//具体调用方法
![RW11M4KL2BFG95]ZQNF{K.png](http://upload-images.jianshu.io/upload_images/5362532-5867a883478d1ac1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

//显示数据时防止字符串为空而导致程序崩溃的方法
   public static String value(String object, String... show) {
        String returnShow = "";
        if (show != null && show.length > 0) {
            returnShow = show[0];
        }
        if (object == null || object.length() == 0)
            return returnShow;
        else
            return object;
    }

//具体调用方法


VWJ5@J6}RQ2)SMA702NWY{2.png

其他的电话号码,手机号码,字符串等用法和这个类似

 /**
     * 字符串转换成日期(字符串的格式为yyyy-MM-dd)
     *
     * @param str//日期字符串
     * @return date
     */
    public static Date StrToDate(String str) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

目前就整理了这些,后面遇到了再继续补充,如果大家有好的工具类,希望帮助补充。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容