Android开发必备技巧之高效字符串筛选

 更新时间:2023年06月29日 09:05:56   作者:ObliviateOnline  
在开发过程中或多或少都要使用一些方法去筛选符合我们要求的字符串,所以下面我们就来介绍一些在开发工作中常用到的字符串筛选方法,让大家都能掌握高效的字符串筛选技巧吧

前言

开发了这么久,每次接H5页面对api请求时都会遇到一个常见的问题,那就是对JSON字符串的处理和传相关参数时候对字符串的筛选处理,这些都是为了保证符合请求API的要求。

当然,对字符串进行处理远远不止这个地方需要,在开发过程中或多或少都要使用一些方法去筛选符合我们要求的字符串,毕竟这是一个作为开发中最常用到的基本类型嘛,可为了处理它们我们总不能每次写到字符串都要重新去编一个新的方法来处理(如果简单的也不是不行)?

这时候我们就需要整理出一个工具类用来专门存放我们的字符串筛选的工具方法,以后使用的时候我们直接拿着调用就行,更加方便快捷,所以下面我们就来介绍一些在开发工作中常用到的字符串筛选方法,让大家都能掌握高效的字符串筛选技巧。

正篇

其实处理字符串的方法五花八门,但还有很多是通用的,所以我们整理出这些通用性质的方法,以达到随用随取的目的。

这里先附上这个文件的地址(MyTest/app/src/main/java/com/example/mytest/RegularUtil.java at main · ObliviateOnline/MyTest · GitHub),有需要可以先看看,下面来介绍一下具体里面包含了哪些。

正则匹配判断

public static boolean isMatch(String param, String pattern) {
    return param != null && pattern != null && Pattern.compile(pattern).matcher(param).matches();
}

isMatch()方法是一个返回值为boolean类型的函数,首先我们对需要判断的字符串以及正则模式判空,然后使用Pattern对象的compile()方法设置要匹配的正则表达式,后面再接着调用matcher()方法将要匹配的字符串输入匹配,最后再使用 matches() 方法检查字符串是否与该模式匹配。

这个方法是可以用来去验证密码、邮箱地址、URL等,在开发中还是蛮重要的。

判断特殊字符

这里也是使用正则表达式来筛选的,下面列两种使用场景:

  • 字符串是否全是数字
  • 字符串是否为手机号码

代码如下:

public static boolean isNumber(String param) {
    return param != null && Pattern.compile("[0-9]+").matcher(param).matches();
}
public static boolean isPhone(String param) {
    return param != null && Pattern.compile("^[1][0-9]{10}$").matcher(param).matches();
}

这里还是使用Pattern去判断的,和第一个方法没有太多差别,不再赘述。

分割字符串

我们有时候还需要去在一串很长的字符串中分离我们想要的小字符串,比如分离以大写字母开头的单词,下面代码就是这个作用:

public static List<String> splitWithUpcase(String param) {
    List<String> array = new ArrayList<>();
    if (param == null || param.isEmpty()) {
        return array;
    }
    Pattern pattern = Pattern.compile("[A-Z]{1}[a-z0-9]*");
    Matcher matcher = pattern.matcher(param);
    while (matcher.find()) {
        array.add(matcher.group());
    }
    return array;
}

我们通过这个方法可以获得一个分离好的以大写字母开头的单词数组,我们因为不是去判断,而是要获取其中符合的单词,所以使用了matcher.find()方法作为条件判断检索,再使用matcher.group()方法去拿到符合条件的单词字符串,最后将他们统一放入我们的List数组里。

判断是否含有表情包

现在很多输入法自带输入表情符号的功能,所以在一些不能有这些表情包输入的输入栏中就需要这种方法:

public static boolean isContainEmoji(String account) {
    int len = account.length();
    boolean isEmoji = false;
    for (int i = 0; i < len; i++) {
        char hs = account.charAt(i);
        if (0xd800 <= hs && hs <= 0xdbff) {
            if (account.length() > 1) {
                char ls = account.charAt(i+1);
                int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                if (0x1d000 <= uc && uc <= 0x1f77f) {
                    return true;
                }
            }
        } else {
            // non surrogate
            if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {
                return true;
            } else if (0x2B05 <= hs && hs <= 0x2b07) {
                return true;
            } else if (0x2934 <= hs && hs <= 0x2935) {
                return true;
            } else if (0x3297 <= hs && hs <= 0x3299) {
                return true;
            } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50|| hs == 0x231a ) {
                return true;
            }
            if (!isEmoji && account.length() > 1 && i < account.length() -1) {
                char ls = account.charAt(i+1);
                if (ls == 0x20e3) {
                    return true;
                }
            }
        }
    }
    return  isEmoji;
}

这里我们做的就和之前的不一样了,我们不再使用正则表达式匹配,而是根据下面这一资料来的: 在Java中,表情符号通常是由一对Unicode编码表示的,这被称为"代理对"(surrogate pair),其中高代理项(high surrogate)的范围是0xd800到0xdbff,低代理项(low surrogate)的范围是0xdc00到0xdfff。
我们根据这一点,使用了一些特殊的Unicode字符编码范围来判断字符串中是否包含表情符号,当然这估计也不够全面,比如后面表情符号又增加了之类的,但确实是可以判断大多数情况的,上面的代码就是用来判断字符串中是否含有表情符号。

结语

当然,我们字符串的筛选还有更多的方法,这里不再多说,我将其中一些已经放入了我的RegularUtil类里,如果想了解更多可以去查询一些相关资料或者自己再写一些,也希望掘友们也分享一下自己用到的,多多交流!

到此这篇关于Android开发必备技巧之高效字符串筛选的文章就介绍到这了,更多相关Android字符串筛选内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android实现可点击展开的TextView

    Android实现可点击展开的TextView

    这篇文章主要为大家详细介绍了Android实现可点击展开的TextView,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android之开发消息通知栏

    Android之开发消息通知栏

    本文主要介绍了Android开发消息通知栏的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Flutter下Android Studio配置gradle的方法

    Flutter下Android Studio配置gradle的方法

    这篇文章主要介绍了Flutter下Android Studio配置gradle的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android文本与视图基本操作梳理介绍

    Android文本与视图基本操作梳理介绍

    下面介绍一下android如何设置文本内容、设置文本字体大小、文本颜色、视图宽高、视图间距、和视图的对齐方式,只简单说明一下如何操作,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • Android 性能优化实现全量编译提速的黑科技

    Android 性能优化实现全量编译提速的黑科技

    这篇文章主要为大家介绍了Android 性能优化实现全量编译提速的黑科技,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android Handler机制的工作原理详析

    Android Handler机制的工作原理详析

    这篇文章主要给大家介绍了关于Android Handler机制的工作原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • android 9.0 launcher3 去掉抽屉式显示所有 app(代码详解)

    android 9.0 launcher3 去掉抽屉式显示所有 app(代码详解)

    本文通过实例代码给大家介绍了android 9.0 Launcher3 去掉抽屉式,显示所有 app,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Android获取系统时间的多种方法

    Android获取系统时间的多种方法

    这篇文章主要介绍了Android获取系统时间的多种方法,对时间进行格式化操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android自定义View实现仿网易音乐唱片播放效果

    Android自定义View实现仿网易音乐唱片播放效果

    这篇文章主要为大家详细介绍了Android自定义View实现仿网易音乐唱片播放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 使用Android的OkHttp包实现基于HTTP协议的文件上传下载

    使用Android的OkHttp包实现基于HTTP协议的文件上传下载

    OkHttp(GitHub主页https://github.com/square/okhttp)是近来人气攀升的一款安卓第三方HTTP包,这里我们来讲解一下如何使用Android的OkHttp包实现基于HTTP协议的文件上传下载:
    2016-07-07

最新评论