判断字符串是不是application/x-www-form-urlencoded字符串(URL编码格式的字符串)
生活随笔
收集整理的這篇文章主要介紹了
判断字符串是不是application/x-www-form-urlencoded字符串(URL编码格式的字符串)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package priv.lwx.cs.util;import java.util.BitSet;/*** 判斷一個字符串是不是URL編碼字符串的工具類,即判斷字符串是不是application/x-www-form-urlencoded字符串** @author liaowenxiong* @date 2022/1/14 11:32*/public class URLEncodeUtils {private static BitSet dontNeedEncoding;static {dontNeedEncoding = new BitSet(256);int i;// 將小寫英文字母添加到BitSet對象中for (i = 'a'; i <= 'z'; i++) {dontNeedEncoding.set(i);}// 將大寫英文字母添加到BitSet對象中for (i = 'A'; i <= 'Z'; i++) {dontNeedEncoding.set(i);}// 將阿拉伯?dāng)?shù)字添加到BitSet對象中for (i = '0'; i <= '9'; i++) {dontNeedEncoding.set(i);}// 將其它URL編碼保留的字符添加到BitSet對象中dontNeedEncoding.set('+');dontNeedEncoding.set('-');dontNeedEncoding.set('_');dontNeedEncoding.set('.');dontNeedEncoding.set('*');}/*** 判斷字符串是否URLEncoder.encode過<br>* 經(jīng)常遇到這樣的情況,拿到一個URL,但是搞不清楚到底要不要encode<Br>* 不做encode吧,擔(dān)心出錯,做encode吧,又怕重復(fù)了<Br>* 支持JAVA的URLEncoder.encode出來的string做判斷。* URL編碼格式:* 將' '轉(zhuǎn)成'+' <br>* 0-9a-zA-Z保留 <br>* '-','_','.','*'保留 <br>* 其他字符轉(zhuǎn)成%XX的格式,X是16進制的大寫字符,范圍是[0-9A-F]* <p>* 這里會有誤差,比如輸入一個字符串 123+456,它到底是原文就是123+456還是123 456做了URL編碼后的內(nèi)容呢?<br>* 其實問題是一樣的,比如遇到123%2B456,它到底是原文即使如此,還是123+456URL編碼后的呢? <br>* 在這里,我認為只要符合URL編碼規(guī)范的,就當(dāng)作已經(jīng)URL編碼過了<br>* 畢竟這個方法的初衷就是判斷string是否urlEncode過<br>** @param str* @return*/public static boolean hasUrlEncoded(String str) {boolean needEncode = false;for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (dontNeedEncoding.get((int) c)) { // 判斷字符是不是URL編碼保留的字符,是就可以不要編碼,也就是可以認為已經(jīng)URL編碼過了continue;}// 不是URL編碼保留的字符,那么就判斷是否符合URL編碼的格式:%XX,X是16進制數(shù)if (c == '%' && (i + 2) < str.length()) {char c1 = str.charAt(++i);char c2 = str.charAt(++i);if (isDigit16Char(c1) && isDigit16Char(c2)) {continue;}}// 即不是URL保留字符,也不符合URL編碼格式,表示字符串不是URL編碼字符串needEncode = true;break;}return !needEncode;}/*** 判斷c是否是16進制的字符** @param c* @return*/private static boolean isDigit16Char(char c) {return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F');}
}
總結(jié)
以上是生活随笔為你收集整理的判断字符串是不是application/x-www-form-urlencoded字符串(URL编码格式的字符串)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方法引用的学习
- 下一篇: 12黄金圣斗士实力排名及理由(黄金圣斗士