最近支付寶掃碼領紅包,複製邀請碼領紅包的活動開展得如火如荼,期間層出不迭一些套路,將自己的支付寶邀請碼混雜在一段有趣的文字中,讓用戶打開支付寶,以此獲得獎金,比如這樣式的:
受朋友之託徵婚 女,唐紫,26歲,未婚,上海本地人,身高1米65,體重48公斤,復旦大學畢業。漂亮大方,愛好旅遊,健身美體,游泳。目前在上海張江一家中國500強公司任職,工作穩定,年薪50萬。上海有2套房,1套在湯臣豪園,一輛特斯拉代步,車牌號OOmTmz89aA,一輛smart代步,車牌k2798,人務實、不拜金,一直沒有合適的男朋友, 她本人要求一點也不高且她家人現在非常着急,發動親戚朋友想請大家給介紹一個。【複製本文到支付寶APP打開可見詳情照片!】
將這段話複製在剪切板,再打開支付寶就能領取紅包,那麼問題來了,支付寶是怎麼辦到的呢?在如此大一段話中找到你的邀請碼,此篇文章將淺顯的實現一下類似功能。
分三步
- 拿到剪切板的內容
- 從剪切板中截取出邀請碼
- 將邀請碼傳遞給後臺
在此我們只需要實現前兩步
剪切板與我們的應用處於兩個進程,進程間通信暫且不表,幸好Android給我們提供了剪切板的系統服務
ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (!manager.hasPrimaryClip()) { //剪切板內無內容
return;
}
ClipData clipData = manager.getPrimaryClip();
String text = clipData.getItemAt(0).getText().toString();
第一步就完成了,現在實現第二步,截取出邀請碼。
通過我的觀察,發現邀請碼的組成都是10位的數字和大小寫字母,知道這一點就很好實現了,貼出代碼
private String findSpecialString(String text, int findStringLength) {
int findLength = 0; //查找到的長度
char[] chars = text.toCharArray();
for (int i = 0, length = chars.length; i < length; i++) {
char c = chars[i];
if (Character.isDigit(c) || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
//是否是字母或數字
findLength++;
} else {
findLength = 0;
}
if (findStringLength == findLength) { //找到了
int startIndex = i - findStringLength;
StringBuilder builder = new StringBuilder();
while (startIndex != i) {
builder.append(chars[++startIndex]);
}
return builder.toString();
}
}
return null;
}
可以看到我這裏還加了個參數來避免了硬編碼10位的字母或數字,改變這個參數值,可以實現查找任意位數的連續字母或數字
思路:
定義變量findLength作爲目前查找到的連續字母或數字位數,在循環裏,只要字符不是數字或字母就會重置這個變量,以此實現查找連續的數字或字母,當findLength等於10時,當前的i必爲我需要的連續字符串的最後一位,只需向前倒推10位即可獲得所需字符串的首位的前一位,然後再通過一個循環構造結果字符串即可。