支付寶吱口令的截取

最近支付寶掃碼領紅包,複製邀請碼領紅包的活動開展得如火如荼,期間層出不迭一些套路,將自己的支付寶邀請碼混雜在一段有趣的文字中,讓用戶打開支付寶,以此獲得獎金,比如這樣式的:

受朋友之託徵婚 女,唐紫,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位即可獲得所需字符串的首位的前一位,然後再通過一個循環構造結果字符串即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章