【java 中用 split 根據逗號分割字符串及正則表達式拓展】


 

正則表達式可用於解析,判斷字符串格式內容。

 

demo里有兩個例子,第一個例子是解析一個長字符串,其中包括多個字段,有字符串類型和整型,可以根據正則表達式去按逗號分割字段,且不會把字符串類型雙引號中的 逗號 計入,適用於摘要這種字段。

第二個例子是郵箱格式的驗證,可以簡單了解正則表達式的使用。

代碼如下:

  @Test
    public void regularExp() {
        // 正則表達式學習

        // 1、逗號分割時不計入字符串字段內的逗號,如摘要中的逗號
        // String line = "\"繳納投標保障金,需用惠州公司基本賬戶,匯款時需注明匯款用途為“E19138的磋商保證金,銀行開具的匯款單蓋章原件由磋商供應商留存,作為保證金收取依據”\"        ,DN02,\"公誠管理咨詢有限公司\"";
        String line = "    \"一個有想法的字符串\", 10086, \"編號為123 ,測試歌曲是:”小星星“,會員限定欣賞\"     ";
        //  List<String> colsValue = Arrays.asList(line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1));
        List<String> colsValue = Arrays.asList(line.split("(?!\"),(?!\")", -1));
        /**
         * 其中 ?: 是非捕獲元之一,還有兩種非捕獲元是 ?= 和 ?!,(非捕獲元會忽略對相關匹配的保存,這樣可以減少內存占用)
         * 這兩個還有更多的含義,前者為正向預查,在任何開始匹配圓括號內的正則表達式模式的位置來匹配搜索字符串,
         * 后者為負向預查,在任何開始不匹配該正則表達式模式的位置來匹配搜索字符串。
         *  假想情景: str = "   "xxx",編號為123 ,"測試歌曲是:”小星星 “,會員限定欣賞"   "
         *  解析:     ?!理解為不匹配條件即可
          * 效果:不會匹配雙引號內的逗號
         */
        for (int x = 0; x < colsValue.size(); x++) {
            System.out.println(colsValue.get(x));
        }
        System.out.println("===以上為逗號分割===");
        System.out.println("\n");


// 2、判斷Email地址是否合法 String email1 = "1486991950@qq.com"; String email2 = "@qq.com"; String email3 = "234af--j@qq.com"; String email4 = "2344@q44.com"; String email5 = "235435.com"; String email6 = "124345324@.com"; String rule = "^\\w+([-+.]\\w+)*@\\w+([.]com)*$"; /** * 按表達式排列順序簡單解釋下: * ^ 開始匹配 * ^\ 和 $ 分別指字符串的開始與結束 ,+ 號代表前面的字符必須至少出現一次(1次或多次)。 * \w 表示匹配字母、數字、下划線。等價於 [A-Za-z0-9_] ,這里有兩個\\是因為idea粘貼字符串會自動轉義 * ([-+.]\w+) 意思是-+. 這三個字符參加匹配(但是只能有一位字符,++這樣是不行的),其字符后再加上數字若干 * ([-+.]\w+)* 多了個*,表示[]* 所代表的內容出現次數不固定,為 ≥0 次 * @\w+([.]com)* 原理同上: @qq3.com * $ 結束匹配 */ List<String> str = new ArrayList<>(); str.add(email1); str.add(email2); str.add(email3); str.add(email4); str.add(email5); str.add(email6); Pattern pattern; Matcher matcher; for(int i = 0; i<str.size(); i++) { pattern = Pattern.compile(rule); matcher = pattern.matcher(str.get(i)); if (matcher.matches()) System.out.println(str.get(i) + " 合法"); else System.out.println(str.get(i) + " 不合法"); } System.out.println("===以上為email分割==="); System.out.println("\n"); }

 

輸出如下:

 
         

"一個有想法的字符串"
10086
"編號為123 ,測試歌曲是:”小星星“,會員限定欣賞"
===以上為逗號分割===




1486991950@qq.com 合法
@qq.com 不合法
234af--j@qq.com 不合法
2344@q44.com 合法
124345324@.com 不合法
235435.com 不合法
===以上為email分割===

 

PS:附上一些其他正則表達式規則:

%表示在所在行中進行處理,s表示查找、替換功能, 格式是:s/查找的內容/替換的內容/選項, *表示查找0個或者多個空格, g表示全部替換
對於任意字符的匹配,建議使用中括號來限制:
[a-z] // 匹配所有的小寫字母  [A-Z] // 匹配所有的大寫字母  [a-zA-Z] // 匹配所有的字母  [0-9] // 匹配所有的數字 ^[0-9]*$ [0-9\.\-] // 匹配所有的數字,句號和減號  [ \f\r\t\n] // 匹配所有的白字符


正則表達式學習鏈接:
https://www.runoob.com/regexp/regexp-syntax.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM