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);}// 将阿拉伯数字添加到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>* 经常遇到这样的情况,拿到一个URL,但是搞不清楚到底要不要encode<Br>* 不做encode吧,担心出错,做encode吧,又怕重复了<Br>* 支持JAVA的URLEncoder.encode出来的string做判断。* URL编码格式:* 将' '转成'+' <br>* 0-9a-zA-Z保留 <br>* '-','_','.','*'保留 <br>* 其他字符转成%XX的格式,X是16进制的大写字符,范围是[0-9A-F]* <p>* 这里会有误差,比如输入一个字符串 123+456,它到底是原文就是123+456还是123 456做了URL编码后的内容呢?<br>* 其实问题是一样的,比如遇到123%2B456,它到底是原文即使如此,还是123+456URL编码后的呢? <br>* 在这里,我认为只要符合URL编码规范的,就当作已经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编码保留的字符,是就可以不要编码,也就是可以认为已经URL编码过了continue;}// 不是URL编码保留的字符,那么就判断是否符合URL编码的格式:%XX,X是16进制数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');}
}

判断字符串是不是application/x-www-form-urlencoded字符串(URL编码格式的字符串)相关推荐

  1. get 与 post的区别?application json 与form表单的区别?

    这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [get 与 p ...

  2. python 判断字符串是否为数字_Python核心知识系列:数字与字符串类型

    ​学习任何一种编程语言时首先要对它的数据类型有所了解,从本篇开始会对 Python 中的常见数据类型的基本概念和操作进行介绍. Python中有6种标准的数据类型:数字(Number).字符串(Str ...

  3. 每日一题:字符串系列---判断一个字符串是否是对称字符串 * 例如“abc“不是对称字符串,“aba“、“abba“、“aaa“、“mnanm“是对称字符串

    判断一个字符串是否是对称字符串 * 例如"abc"不是对称字符串,"aba"."abba"."aaa"."mn ...

  4. 1.19(对象类型判断、复制、in、遍历;深拷贝与浅拷贝;字符串的遍历接口、模板字符串、字符串扩展方法)

    1.19(对象类型判断.复制.in.遍历;深浅拷贝;字符串的遍历接口.模板字符串.unicode.字符串扩展方法) 一.对象 1.属性简洁表示法与属性名表达式 let name = "wuy ...

  5. %3c strong%3e html,模型绑定url编码的字符串mvc 3

    我正在使用MVC 3模型绑定与JQuery序列化程序()编辑窗体中的某些数据.除非在我的数据中有一些'url-encoded'(不知道更好的术语)文本,否则所有的工作都很好.这些数据就在那里,因为我使 ...

  6. python字典转字符串后里面的冒号还在吗_Python字典、字符串及列表的相互转换

    Python中几种常见数据结构的相互转换:字符串(str).字典(dict).列表(list). 一.字符串–列表 字符串转列表 1.使用内置函数 list() 2.使用内置函数 eval() 3.使 ...

  7. python创建一个字典、关键字为只包含字母的字符串_探究Python源码,终于弄懂了字符串驻留技术...

    摘要:在本文中,我们将深入研究 Python 的内部实现,并了解 Python 如何使用一种名为字符串驻留(String Interning)的技术,实现解释器的高性能. 每种编程语言为了表现出色,并 ...

  8. 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...

    1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 ...

  9. callablestatement.setstring会不会将字符串trim_Java String:重要到别人只能当老二的字符串类

    字符串,是Java中最重要的类.这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性. 关于字符串,有很多的面试题,但我总觉得理论知识绕来绕去没多大意思.你比如 ...

最新文章

  1. LeetCode刷题宝典 V1.0 PDF下载
  2. 磁盘和文件系统管理(一)
  3. 更改mssql数据库的名字
  4. Python数据结构与算法(第三天)
  5. Application Performance Management Monitoring | New Relic
  6. MySQL高级 - SQL优化 - limit优化
  7. altera fpga sdi输出方案_FPGA在电力电子中的应用有哪些?
  8. eclipse 版本理解
  9. html中在哪儿使用div,使用javascript在html中使用div
  10. 甲骨文员工谈被裁原因;《绝地求生》停机维护;谷歌正研发折叠屏样机 | 极客头条...
  11. 栈和堆(Stack Heap)
  12. lamp php的ssl,ssh支持
  13. Pandas基础|列方向分组变形
  14. 可实时配置的错误系统 errcode-errmsg
  15. unity学习之动画状态切换后角色沉入地面里面
  16. 普普通通的算法期末考试试卷
  17. java绘制铁路线_铁路站场简图绘制软件源码
  18. 华为5g cpe 虚拟服务器,购买华为5G CPE Pro 2之前你需要知道这些
  19. 试用一片3-8译码器74LS138和其它必要的门电路设计一个一位全加器, 被加数为Ai, 加数为Bi, 低位来的进位为Ci-1, 本位和为Si, 本位对高位的进位为Ci
  20. 根据年月日计算今天是一年中的第几天

热门文章

  1. stream分组计数_Java Stream:第2部分,计数始终是计数吗?
  2. 谷歌gcp 远程计算机_引导性GCP:带有Google Cloud Pub / Sub的Spring Cloud Stream
  3. java jwt 验证_教程:用Java创建和验证JWT
  4. jsp过滤器示例_Java 8过滤器,地图,收集和流示例
  5. javafx阴影_JavaFX技巧23:节省内存! 属性的阴影场
  6. 运动基元_发现大量Java基元集合处理
  7. 怎样编写测试类测试分支_编写干净的测试–天堂中的麻烦
  8. aws上部署hadoop_在AWS Elastic MapReduce上运行PageRank Hadoop作业
  9. jboss ejb_使用JBoss AS 7进行SSL加密的EJB调用
  10. Apache ActiveMQ中的消息级别授权