最近開發微信小程序,openId的處理涉及一個自定義後綴的分割,所以想當然的使用了apache-common的StringUtils工具類的split方法:
org.apache.commons.lang3.StringUtils.split
示例代碼:
String s1 = "owuVV4_BSs4oKz2srrw-4ceLgonCE#_#null";
String[] arr = org.apache.commons.lang3.StringUtils.split(s1, "#_#");
由於自定義的分隔符是“#_#”,所以這個時候奇蹟出現了。
分割後的結果,包含三個元素:
我的第一反應,是正則惹的禍,但是查看下正則表達式的關鍵字,並沒有#。
用String類自帶的split試一下:String[] arr2 = s1.split("#_#");
結果是對的:
String自帶的split就是根據正則表達式進行分割的,所以驗證了不是正則導致的。查看下StringUtils.split源碼,發現其實現邏輯是將分隔符的每個字符,然後多次分割。
後來找了另一個方法,把“#_#”作爲一個整體分隔符進行分割:splitByWholeSeparator