java publicdatautil_Java数据类型判断工具类DataTypeUtil
背景
之前要写一个项目,根据配置以及前端入参来调用具体的接口执行对应的任务,需要校验前端的入参是否是指定的数据类型,防止调用后续接口时出现异常。
然后看了下JAVA自带的方法以及Spring、Apache等相关jar包中的方法,发现没有合适的我想用的方法,于是就自己写了一个工具类。
可以判断的数据类型
这个工具类可以判断以下格式的数据:
NUMBER("number", "数字")
, BOOLEAN("boolean", "布尔")
, ARRAY_STRING("array_string", "数组")
, ARRAY_NUMBER("array_number", "数组")
, ARRAY_BOOLEAN("array_boolean", "数组")
, ARRAY_DATETIME("array_datetime", "数组")
, DATETIME("datetime", "时间日期")
, TIMESTAMP_MILL("timestamp_mill", "时间戳(毫秒)")
, TIMESTAMP_SEC("timestamp_sec", "时间戳(秒)")
;
字符串的判断这里就不说了。。。
特别说明
通过isNumeric()方法判断是否是数字,支持判断带有正负号、小数点的字符串是否为数字,###,###类似这种的数字(111,222)不支持哈。
isDateTime()方法需要指定日期的格式(类似yyyy-MM-dd HH:mm:ss这种)。
源码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 数据类型判断
* @author 李锋镝
* @date Create at 15:36 2019/4/4
*/
public class DataTypeUtil {
/**
* 判断是否是数字类型的
* @param cs CharSequence
* @return boolean
*/
public static boolean isNumeric(final CharSequence cs) {
if (StringUtils.isBlank(cs)) {
return true;
}
Pattern pattern = Pattern.compile("[-+]?[0-9]+(\\.[0-9]+)?");
Matcher isNum = pattern.matcher(cs);
return isNum.matches();
}
public static boolean isBoolean(final String str) {
if (StringUtils.isBlank(str)) {
return false;
}
return str.equals("true") || str.equals("false");
}
/**
* 判断字符串是否是指定的时间格式
* @param str str
* @param format 格式
* @return boolean
*/
public static boolean isDateTime(final String str, final String format) {
if (StringUtils.isBlank(str)) {
return false;
}
if (StringUtils.isBlank(format)) {
throw new NullPointerException("format不能为空");
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
try {
simpleDateFormat.setLenient(false);
simpleDateFormat.parse(str);
} catch (ParseException e) {
return false;
}
return true;
}
/**
* 判断字符串是否是Array
* @param str str
* @return boolean
*/
public static boolean isArrayNumber(final String str) {
if (StringUtils.isBlank(str)) {
return false;
}
try {
JSONArray jsonArray = JSON.parseArray(str);
Iterator iterator = jsonArray.iterator();
boolean result = false;
while (iterator.hasNext()) {
result = isNumeric(iterator.next().toString());
if (!result) {
return false;
}
}
return result;
} catch (JSONException e) {
return false;
}
}
/**
* 判断字符串是否是Array
* @param str str
* @return boolean
*/
public static boolean isArrayString(final String str) {
if (StringUtils.isBlank(str)) {
return false;
}
try {
JSON.parseArray(str);
return true;
} catch (JSONException e) {
return false;
}
}
/**
* 判断字符串是否是Array
* @param str str
* @return boolean
*/
public static boolean isArrayBoolean(final String str) {
if (StringUtils.isBlank(str)) {
return false;
}
try {
JSONArray jsonArray = JSON.parseArray(str);
Iterator iterator = jsonArray.iterator();
boolean result = false;
while (iterator.hasNext()) {
result = isBoolean(iterator.next().toString());
if (!result) {
return false;
}
}
return result;
} catch (JSONException e) {
return false;
}
}
/**
* 判断字符串是否是Array
* @param str str
* @param format format
* @return boolean
*/
public static boolean isArrayDateTime(final String str, final String format) {
if (StringUtils.isBlank(str)) {
return false;
}
if (StringUtils.isBlank(format)) {
throw new NullPointerException("format不能为空");
}
try {
JSONArray jsonArray = JSON.parseArray(str);
Iterator iterator = jsonArray.iterator();
boolean result = false;
while (iterator.hasNext()) {
result = isDateTime(iterator.next().toString(), format);
if (!result) {
return false;
}
}
return result;
} catch (JSONException e) {
return false;
}
}
/**
* 判断字符串是否是时间戳(秒)
* @param str str
* @return boolean
*/
public static boolean isTimestampSec(final String str) {
if (StringUtils.isBlank(str)) {
return false;
}
// 秒 长度是十位
if (StringUtils.isNumeric(str)) {
return str.length() == 10;
}
return false;
}
/**
* 判断字符串是否是时间戳(毫秒)
* @param str str
* @return boolean
*/
public static boolean isTimestampMill(final String str) {
if (StringUtils.isBlank(str)) {
return false;
}
// 毫秒 长度是13位
if (StringUtils.isNumeric(str)) {
return str.length() == 13;
}
return false;
}
public static void main(String[] a) {
DateTime dateTime = new DateTime();
System.out.println(dateTime.getYear());
System.out.println(dateTime.getMonthOfYear());
System.out.println(isDateTime("2019-06-01T15:59:59.656Z", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
}
}
只做了简单的测试,如有错误,请积极指出哈~
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
java publicdatautil_Java数据类型判断工具类DataTypeUtil相关推荐
- java redis remove_最全的Java操作Redis的工具类
RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...
- Java 线程 - 基础及工具类 (二)
Java 并发系列文章 Java 线程 - 并发理论基础(一) Java 线程 - 基础及工具类 (二) Java 线程 - 并发设计模式 (三) Java 线程(二) 通用的线程生命周期 Java ...
- java练习(数组工具类的封装)[目前写过最长的代码,虽然不难]
java练习(数组工具类的封装)[目前写过最长的代码,虽然不难] package myUtil.arrayUtil;public class ArraysUtil {/*** 升序排列一个byte数组 ...
- java Excel导入导出工具类 及使用demo
java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...
- php 正则车架号,正则判断工具类 - 我的开源中国 - OSCHINA - 中文开源技术交流社区...
package com.gulf.utils; import java.text.ParseException; import java.text.SimpleDateFormat; /** * 正则 ...
- Java 数字转汉字工具类
Java 数字转汉字工具类 一.工具类--NumberToCnUtil package com.example.demotest.util;import java.util.Arrays; impor ...
- 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)
文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...
- java项目常用的工具类
前言 在开发过程中,我们会遇到很多繁琐或者棘手的问题,但是,这些问题往往会存在一些便捷的工具类,来简化我们的开发,下面是我工作中经常使用到的工具类 常用工具类 日期工具类 import java.te ...
- Java 中文转拼音工具类 (附带长度转换 2:1)
Java 中文转拼音工具类 (附带长度转换 2:1) import com.google.common.collect.Lists; import com.google.common.collect. ...
最新文章
- PyTorch 学习笔记(四):权值初始化的十种方法
- 数字图像处理:第二十一章 视频压缩标准
- 【Java报错】GP数据库 function point(unknown) is not unique.Could not choose a best candidate function 问题解决
- 虚拟机和Docker的最大区别
- weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0
- java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved
- 在桌面应用中使用JAVA DB[组图]
- 鸿蒙os在3月底推送,华为鸿蒙OS Beta 3将从3月31日起推送
- linux安装 gcc 7.2.0,centos7 安装 gcc-6.2.0
- php rc4对称加密函数,PHP实现的简单对称加密与解密方法实例小结
- vscode 设置指南
- html空间图片,html+js实现图片预览
- AC/DC、DC/DC转换器基础指南(二)
- 《具体数学》第一章学习总结
- Ubuntu22.04安装gamit10.71
- LIN总线、CAN总线、FlexRay总线和MOST总线---汽车四大总线
- Python编程练习1
- 算法竞赛---day1(等差素数列)
- html圆形分成六份,在ai里怎么把一个圆平均分成几份
- B. Dubious Cyrpto(思维+枚举)