背景

之前要写一个项目,根据配置以及前端入参来调用具体的接口执行对应的任务,需要校验前端的入参是否是指定的数据类型,防止调用后续接口时出现异常。

然后看了下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相关推荐

  1. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

  2. Java 线程 - 基础及工具类 (二)

    Java 并发系列文章 Java 线程 - 并发理论基础(一) Java 线程 - 基础及工具类 (二) Java 线程 - 并发设计模式 (三) Java 线程(二) 通用的线程生命周期 Java ...

  3. java练习(数组工具类的封装)[目前写过最长的代码,虽然不难]

    java练习(数组工具类的封装)[目前写过最长的代码,虽然不难] package myUtil.arrayUtil;public class ArraysUtil {/*** 升序排列一个byte数组 ...

  4. java Excel导入导出工具类 及使用demo

    java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...

  5. php 正则车架号,正则判断工具类 - 我的开源中国 - OSCHINA - 中文开源技术交流社区...

    package com.gulf.utils; import java.text.ParseException; import java.text.SimpleDateFormat; /** * 正则 ...

  6. Java 数字转汉字工具类

    Java 数字转汉字工具类 一.工具类--NumberToCnUtil package com.example.demotest.util;import java.util.Arrays; impor ...

  7. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  8. java项目常用的工具类

    前言 在开发过程中,我们会遇到很多繁琐或者棘手的问题,但是,这些问题往往会存在一些便捷的工具类,来简化我们的开发,下面是我工作中经常使用到的工具类 常用工具类 日期工具类 import java.te ...

  9. Java 中文转拼音工具类 (附带长度转换 2:1)

    Java 中文转拼音工具类 (附带长度转换 2:1) import com.google.common.collect.Lists; import com.google.common.collect. ...

最新文章

  1. PyTorch 学习笔记(四):权值初始化的十种方法
  2. 数字图像处理:第二十一章 视频压缩标准
  3. 【Java报错】GP数据库 function point(unknown) is not unique.Could not choose a best candidate function 问题解决
  4. 虚拟机和Docker的最大区别
  5. weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0
  6. java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved
  7. 在桌面应用中使用JAVA DB[组图]
  8. 鸿蒙os在3月底推送,华为鸿蒙OS Beta 3将从3月31日起推送
  9. linux安装 gcc 7.2.0,centos7 安装 gcc-6.2.0
  10. php rc4对称加密函数,PHP实现的简单对称加密与解密方法实例小结
  11. vscode 设置指南
  12. html空间图片,html+js实现图片预览
  13. AC/DC、DC/DC转换器基础指南(二)
  14. 《具体数学》第一章学习总结
  15. Ubuntu22.04安装gamit10.71
  16. LIN总线、CAN总线、FlexRay总线和MOST总线---汽车四大总线
  17. Python编程练习1
  18. 算法竞赛---day1(等差素数列)
  19. html圆形分成六份,在ai里怎么把一个圆平均分成几份
  20. B. Dubious Cyrpto(思维+枚举)

热门文章

  1. js Javascript中调用对象内函数.(字符串函数名)
  2. Python之输入一个年份判断该年是否是闰年
  3. 知云文献翻译安装及使用教程
  4. 准备VB或C#开发环境(Visual Studio)
  5. 开发者眼中的“道、法、术、器”
  6. Python语言练习
  7. 【SPDK文件系统-Blob FS】
  8. 葡萄牙晋级世界杯决赛
  9. 七十七.ags4-1.1.15
  10. SQL Server 数据库(高级)完结篇