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

import java.util.BitSet;/*** 判断一个字符串是不是URL编码字符串的工具类,即判断字符串是不是application/x-www-form-urlencoded字符串** @author liaowenxiong* @date 2022/1/14 11:32*/public class URLEncodeUtils {private static BitSet bitSet;static {bitSet = new BitSet(256);int i;// 将小写英文字母添加到BitSet对象中for (i = 'a'; i <= 'z'; i++) {bitSet.set(i);}// 将大写英文字母添加到BitSet对象中for (i = 'A'; i <= 'Z'; i++) {bitSet.set(i);}// 将阿拉伯数字添加到BitSet对象中for (i = '0'; i <= '9'; i++) {bitSet.set(i);}// 将其它URL编码保留的字符或ASCII字符添加到BitSet对象中bitSet.set('+');bitSet.set('-');bitSet.set('_');bitSet.set('.');bitSet.set('*');}/*** 判断字符串是否被URL编码过,即是否URLEncoder.encode过<br>* 经常遇到这样的情况,拿到一个URL,但是搞不清楚到底要不要encode<br>* 不做encode吧,担心出错,做encode吧,又怕重复了<br>* 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>** @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);// 判断字符是不是URL编码保留字符(或者叫作ASCII字符),是就可以不要编码,也就是可以认为已经URL编码过了if (bitSet.get((int) c)) {continue;}// 不是ASCII字符,那么就判断是否符合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;}}// 即不是不是ASCII字符,也不符合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');}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据查询和业务流分开_传统数仓和大数据数仓的区别是什么?

概念与容器为什么先说这个&#xff0c;其实很简单&#xff1a;因为绝大多数人都把这两个概念混为一谈。然后就会出现各种各样的问题&#xff1a;oracle不是数据库么&#xff0c;怎么又是数据仓库&#xff1f;Hive不是数据仓库么&#xff1f;怎么又是数据库&#xff1f;数据仓库…

android 多语言不起作用,Android本地化语言环境不起作用,所有区域代码都存在问题...

我需要将除瑞士之类的子语言环境添加到我的应用程序中,而不是普通的德语.我找到的德语资源文件夹的语言环境扩展名为de.所以我的文件夹名为“values-de”.这很好.然后我添加了“values-de_CH”并继续收到错误“无效的资源目录名称”.我也试过“values-de_rCH”和“values-de_ch…

aws 性能_AWS上的应用程序自动扩展–选项和对性能的影响

aws 性能至关重要的是扩展软件应用程序&#xff0c;以避免由于网站的客户群或需要处理大型数据集的应用程序等导致的工作负载增加而导致性能瓶颈的情况。云服务提供商通常是访问其他应用程序的最佳方法随需应变的资源&#xff0c;可根据应用程序的负载变化来放大或缩小。 1.什…

java中月日年这种怎么转换成年月日_最“热乎”的Java社招面试经历分享(共40个面试题)...

面试时间&#xff1a;2020年10月12日1、final finally finalize的区别2、synchronized关键字的作用以及在什么时候使用&#xff0c;concurrent包里面其它的锁。3、有遇到过死锁的问题吗&#xff1f;(死锁的原理和解决方法)4、hashmap的实现原理&#xff0c;hashmap和hashtable的…

(案例)使用Cookie保存用户最后一次访问的时间

文章目录需求分析示例代码需求 1.访问一个Servlet&#xff0c;如果获取不到上一次访问的时间&#xff0c;则提示&#xff1a;您好&#xff0c;欢迎访问。 2.如果可以获取上一次访问的时间&#xff0c;则提示&#xff1a;您好&#xff0c;欢迎回来&#xff0c;您上次访问时间为…

aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

aws lambda使用快速提供内容对于任何网站或应用程序具有更好的客户体验都是必不可少的。 如果您将网站或应用程序托管在AWS Cloud中&#xff0c;那么无论从何处访问应用程序&#xff0c;都可以以较低的延迟快速提供内容。 AWS提供了CloudFront服务&#xff0c;用于将内容缓存在…

android+阴影+xml,Android 阴影视图 ShadowViewHelper

软件介绍ShadowViewHelper 是 Android 的阴影布局。xml:android:id"id/activity_main_shadow_view_b"android:layout_width"wrap_content" android:layout_height"wrap_content"android:layout_gravity"center"android:layout_marginT…

docker-compose观察实时日志_基于 Flink SQL CDC 的实时数据同步方案

整理&#xff1a;陈政羽(Flink 社区志愿者) Flink 1.11 引入了 Flink SQL CDC&#xff0c;CDC 能给我们数据和业务间能带来什么变化&#xff1f;本文由 Apache Flink PMC&#xff0c;阿里巴巴技术专家伍翀 (云邪)分享&#xff0c;内容将从传统的数据同步方案&#xff0c;基于 F…

android dialog 字体,android – 为AlertDialog的MultiSelectItems设置自定义字体(字体)

AlertDialog.Builder使用AlertController.AlertParams构建对话框.我检查了AlertDialog.Builder #create()调用AlertController.AlertParams #application()如果设置了项目,则创建ListView并分配适配器(AlertParams#createListView()).我基于createListView源创建了自定义适配器…

困难是成功路上的垫脚石_Java是开发的垫脚石。 学习吧!

困难是成功路上的垫脚石Java是全世界使用最广泛的编程语言之一 。 尽管也有很多其他编程语言&#xff0c;但是没有什么可以比Java更好的了。 Java是用于开发移动应用程序&#xff0c;游戏&#xff0c;Web应用程序&#xff0c;桌面应用程序和许多其他令人兴奋的事物的出色语言之…

python 3.6.5 shell_Linux 安装 Python3.6.5

1. 安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2. 下载 Python 3.6.5 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 3. 创建安装…

你真的会用Mac中的Finder吗?

参加&#xff1a;https://zhuanlan.zhihu.com/p/144139903

用c语言实现mfc系统,MFC实现学生选课系统

本文实例为大家分享了MFC实现学生选课系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下先上效果图&#xff1a;主要功能&#xff1a;输入学号&#xff0c;从数据库中查找学号&#xff0c;若找到相匹配的学号&#xff0c;则显示数据库中姓名、学历、导师&#xff…

spring 构造函数注入_Spring构造函数依赖注入示例

spring 构造函数注入欢迎使用Spring构造函数依赖注入示例指南。 基于构造器的依赖注入是Spring 依赖注入的一种 。 依赖注入的另一种类型是Setter注入和字段注入。 有关Spring依赖注入的更多信息&#xff1a; Spring二传手注射的例子 Spring田间注入 依赖注入–构造函数与现…

python用pip安装numpy mac_Mac下python安装numpy,pandas,matplotlib

numpy是数据分析的库&#xff0c;我的目的是分析股票的数据&#xff0c;Pandas 有两种自己独有的基本数据结构Series &#xff08;一维&#xff09;和 DataFrame&#xff08;二维&#xff09;&#xff0c;它们让数据操作更简单了。它也是 Python 的一个库&#xff0c;所以&…

IntelliJ IDEA for Mac工件包(artifact)中 Web facet resources 的模块名称有误,如何修改?

在工件管理界面中&#xff0c;如果某个工件包中 Web facet resources 的模块名称有误&#xff0c;如下图所示&#xff1a; 你可以在项目根目录下的 .idea/artifacts 目录下找到以工件名称命名的 xml 文件&#xff0c;找到其中含有 facet 属性的 element 标签&#xff0c;更正…

html dom 修改,HTML DOM - 修改

创建新的 HTML 元素如需向 HTML DOM 添加新元素&#xff0c;您首先必须创建该元素(元素节点)&#xff0c;然后把它追加到已有的元素上。实例This is a paragraph.This is another paragraph.var paradocument.createElement("p");var nodedocument.createTextNode(&q…

python数据处理常用函数_Python常用数据处理函数

java多线程处理 package com.copyFile; import java.io.BufferedReader;import java.io.File;import java.io.FileReader;im ... &lbrack;Android&rsqb; RelativeLayout&comma; LinearLayout&comma;FrameLayout Android RelativeLayout 属性 // 相对于给定ID控…

redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较

redis nosql1.什么是NoSql数据库&#xff1f; NoSql&#xff08;不仅是Sql&#xff09;数据库是可水平扩展&#xff0c;持久存储半结构或非结构化数据并具有灵活模式的非关系数据库。 这些数据库支持多种数据模型&#xff0c;例如键值&#xff0c;文档&#xff0c;列族&#xf…