Android開發(fā)必備技巧之高效字符串篩選
前言
開發(fā)了這么久,每次接H5頁面對api請求時都會遇到一個常見的問題,那就是對JSON字符串的處理和傳相關(guān)參數(shù)時候?qū)ψ址暮Y選處理,這些都是為了保證符合請求API的要求。
當(dāng)然,對字符串進(jìn)行處理遠(yuǎn)遠(yuǎn)不止這個地方需要,在開發(fā)過程中或多或少都要使用一些方法去篩選符合我們要求的字符串,畢竟這是一個作為開發(fā)中最常用到的基本類型嘛,可為了處理它們我們總不能每次寫到字符串都要重新去編一個新的方法來處理(如果簡單的也不是不行)?
這時候我們就需要整理出一個工具類用來專門存放我們的字符串篩選的工具方法,以后使用的時候我們直接拿著調(diào)用就行,更加方便快捷,所以下面我們就來介紹一些在開發(fā)工作中常用到的字符串篩選方法,讓大家都能掌握高效的字符串篩選技巧。
正篇
其實處理字符串的方法五花八門,但還有很多是通用的,所以我們整理出這些通用性質(zhì)的方法,以達(dá)到隨用隨取的目的。
這里先附上這個文件的地址(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類型的函數(shù),首先我們對需要判斷的字符串以及正則模式判空,然后使用Pattern對象的compile()方法設(shè)置要匹配的正則表達(dá)式,后面再接著調(diào)用matcher()方法將要匹配的字符串輸入匹配,最后再使用 matches() 方法檢查字符串是否與該模式匹配。
這個方法是可以用來去驗證密碼、郵箱地址、URL等,在開發(fā)中還是蠻重要的。
判斷特殊字符
這里也是使用正則表達(dá)式來篩選的,下面列兩種使用場景:
- 字符串是否全是數(shù)字
- 字符串是否為手機(jī)號碼
代碼如下:
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;
}我們通過這個方法可以獲得一個分離好的以大寫字母開頭的單詞數(shù)組,我們因為不是去判斷,而是要獲取其中符合的單詞,所以使用了matcher.find()方法作為條件判斷檢索,再使用matcher.group()方法去拿到符合條件的單詞字符串,最后將他們統(tǒng)一放入我們的List數(shù)組里。
判斷是否含有表情包
現(xiàn)在很多輸入法自帶輸入表情符號的功能,所以在一些不能有這些表情包輸入的輸入欄中就需要這種方法:
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;
}這里我們做的就和之前的不一樣了,我們不再使用正則表達(dá)式匹配,而是根據(jù)下面這一資料來的: 在Java中,表情符號通常是由一對Unicode編碼表示的,這被稱為"代理對"(surrogate pair),其中高代理項(high surrogate)的范圍是0xd800到0xdbff,低代理項(low surrogate)的范圍是0xdc00到0xdfff。
我們根據(jù)這一點,使用了一些特殊的Unicode字符編碼范圍來判斷字符串中是否包含表情符號,當(dāng)然這估計也不夠全面,比如后面表情符號又增加了之類的,但確實是可以判斷大多數(shù)情況的,上面的代碼就是用來判斷字符串中是否含有表情符號。
結(jié)語
當(dāng)然,我們字符串的篩選還有更多的方法,這里不再多說,我將其中一些已經(jīng)放入了我的RegularUtil類里,如果想了解更多可以去查詢一些相關(guān)資料或者自己再寫一些,也希望掘友們也分享一下自己用到的,多多交流!
到此這篇關(guān)于Android開發(fā)必備技巧之高效字符串篩選的文章就介紹到這了,更多相關(guān)Android字符串篩選內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實戰(zhàn)打飛機(jī)游戲之無限循環(huán)的背景圖(2)
這篇文章主要為大家詳細(xì)介紹了Android實戰(zhàn)打飛機(jī)游戲之無限循環(huán)的背景圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07
點擊微信內(nèi)網(wǎng)頁a標(biāo)簽直接跳轉(zhuǎn)打開淘寶APP的方法實例
這篇文章主要給大家介紹了關(guān)于如何實現(xiàn)點擊微信內(nèi)網(wǎng)頁a標(biāo)簽直接跳轉(zhuǎn)打開淘寶APP的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-11-11
解決android.support.v4.content.FileProvide找不到的問題
這篇文章主要介紹了解決android.support.v4.content.FileProvide找不到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android實現(xiàn)手勢滑動多點觸摸放大縮小圖片效果
這篇文章主要介紹了Android實現(xiàn)手勢滑動多點觸摸放大縮小圖片效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-02-02
Android ListView和Adapter數(shù)據(jù)適配器的簡單介紹
這篇文章主要介紹了Android ListView和Adapter數(shù)據(jù)適配器的簡單介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
Android初學(xué)者必須知道的10個技術(shù)
本篇內(nèi)容給大家整理10個作為Android初學(xué)者必須要了解和會用的技術(shù)以及詳細(xì)代碼分析,需要的朋友收藏下慢慢學(xué)習(xí)吧。2017-12-12
Android啟動初始化方案App StartUp的應(yīng)用詳解
這篇文章主要介紹了Android啟動初始化方案App StartUp的使用方法,StartUp是為了App的啟動提供的一套簡單、高效的初始化方案,下面我們來詳細(xì)了解2022-09-09

