我们有时候需要在GET的参数中传递参数,例如是byte[]类型的内容,一般来说是转成Base64的编码格式,但是带来一个问题是:base64编码后,里面可能会出现一些字符是url里面冲突的,例如=+/这些,虽然可以URLEncode进行编码,但这还是会给程序带来一些复杂度或者不确定性。 关于URL编码的详细规范,可以查看RFC 3986, 这里只对我们会涉及的信息做简要说明。 RFC 3986中有如下两个重要规定: Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、- _ . ~4个特殊字符以及所有保留字…

2022-11-23 0条评论 323点热度 0人点赞 admin 阅读全文

Java里使用普通数据类型进行计算时候,遇到浮点数运算的时候,经常会遇到出现这样的数字: 1.6666666666667 411.49999999999994 Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。 这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。 在有的编…

2022-11-16 0条评论 143点热度 0人点赞 admin 阅读全文

相信很多小伙伴写程序有自己的一套工具类,或者遇到一个功能,会去网上找一些工具类,难免还会引入很多第三方类库,一个是增加了类库之间冲突的风险,另外是增大了整个包的体积。 我们现在很多时候开发框架选择的是SpringBoot,起始SpringBoot自带了很多使用的工具类,下面介绍下: 断言是一个逻辑判断,用于检查不应该发生的情况 Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启 SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查 /…

2022-10-12 0条评论 128点热度 0人点赞 admin 阅读全文

分享我自用的校验身份证是否合法的工具函数,另外还可以从身份证中提出相关信息,例如生日、性别、地区、转换身份证位数(15到18位)、还可以检测香港和台湾的身份证号,如下(相关信息写在静态函数注释里了): IdCardUtils.java public class IdCardUtils { /** 中国公民身份证号码最小长度。 */ public static final int CHINA_ID_MIN_LENGTH = 15; /** 中国公民身份证号码最大长度。 */ public static final i…

2022-03-05 0条评论 256点热度 0人点赞 admin 阅读全文

网页显示某些小的图片需要转成base64的格式,例如<img src="data:image/jpg;base64,anc123==" />这样的形式,后台图片的文件或者类型,需要一个转换方法,工具方法如下: 可用户将RenderedImage(或者BufferedImage)以及File(图片文件)转成base64格式的。 /** * 把RenderedImage转成base64格式的形式,用于网页img标签显示图片 * @param img RenderedImage * @param format…

2022-03-01 0条评论 287点热度 0人点赞 admin 阅读全文

分享我使用的用户解密微信支付APIV3的通知notify,根据微信支付官方的介绍:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_5.shtml是使用的AEAD_AES_256_GCM加密方式,使用key、nonce和associated_data,对数据密文resource.ciphertext进行解密,得到JSON形式的资源对象。不过看了下,当前页面并没有相关的例子,下面贴出我使用的工具算法。 /** * AEAD_AES_256_GCM 解密 …

2022-02-26 0条评论 634点热度 0人点赞 admin 阅读全文

生成验证码发送的等场景下会用到,生成多少位(由参数传入)随机数字的字符串,代码如下: /** * 生成随机数字字符串 * @param length 生成数字字符串的长度 */ public static String generateRandomDigitalString(int length) { String str = "0123456789"; Random random = new Random(); StringBuilder sb = new StringBuilder(); for (int i …

2022-02-22 0条评论 241点热度 0人点赞 admin 阅读全文

工具方法:获取给定多少位的随机字符,使用Random类的nextInt方法,candidate中的候选字符,可以根据实际需要进行调整。代码如下: /** * 生成随机字符串 * @param length 生成随机字符的长度 */ public static String generateRandomString(int length) { // 候选字符,现在是大小写字母和数字,可以根据实际情况调整 String candidate = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJK…

2022-02-20 0条评论 237点热度 0人点赞 admin 阅读全文

如题,工具方法,项目中用到的字符命名方式需要互转,不依赖任何第三方库,不挑JDK版本,复制粘贴即可用 下划线命名方式:some_name 驼峰命名方式:someName public static void main(String[] args) throws Exception { System.out.println(underscoreToCamel("some_key")); System.out.println(camelToUnderline("someKey")); } /** * 下划线命名转驼峰方…

2022-01-29 0条评论 322点热度 0人点赞 admin 阅读全文

可作为工具方法,使用Java的正则表达式来判断一个给定的字符串是否存在空白(这个空白可能是空格也可能是Tab,也可能是多个这样的空格或者Tab),正则表达式是:^(.*\s+.*)+$,代码如下: // 检查给定的字符串是否包含空白(一个或者多个空格或者Tab) public static boolean containsWhitespace(String s) { Pattern p = Pattern.compile("^(.*\\s+.*)+$"); Matcher m = p.matcher(s); ret…

2022-01-10 0条评论 438点热度 0人点赞 admin 阅读全文