Java判断字符串是否为IP地址的方法

网友投稿 448 2022-11-28


Java判断字符串是否为IP地址的方法

java 判断字符串是否为IP地址,供大家参考,具体内容如下

1、代码

主要就是这么几个条件

非空

长度符合 0.0.0.0 - 255.255.255.255

包含分隔符 且 个数正确

四个全部是数字,且都在合理的范围内

/**

* 判断某个字符串是否是一个 IP 地址

*

* @param str 字符串

*/

public static boolean isIpStr(String str) {

// 非空

// boolean notBlank = StringUtils.isNotBlank(str);

// 长度符合 0.0.0.0 - 255.255.255.255

// boolean length = CommonUtils.isNumberBetween(str.length(),7,15);

if (StringUtils.isNotBlank(str) && CommonUtils.isNumberBetween(str.length(), 7, 15)) {

String regex = ".";

// 包含分隔符 且 个数正确

if (str.contains(regex) && str.split(regex).length == 4) {

boolean legalNumber = true;

// 四个全部是数字,且都在合理的范围内

for (String obj : Lists.newArrayList(str.split(regex))) {

if (NumberUtils.isDigit(obj)) {

Integer value = Integer.parseInt(obj);

legalNumber = CommonUtils.isNumberBetween(value, 0, 255);

} else {

// 任意一个不是数字,不合法

legalNumber = false;

break;

}

}

return legalNumber;

}

}

return false;

}

2、CommonUtils 工具类

package cn.zjcs.common.util;

import cn.hutool.core.util.ReUtil;

import lombok.AccessLevel;

import lombok.Getter;

import lombok.NoArgsConstructor;

import java.math.BigDecimal;

import java.math.RoundingMode;

/**

* @author Created by 谭健 on 2019/6/11. 星期二. 15:20.

* © All Rights Reserved.

*/

@NoArgsConstructor(access = AccessLevel.PRIVATE)

public class CommonUtils {

/**

* 是否为 null

*

* @param o

* @return null返回 true

*/

public static boolean isNull(Object o) {

return o == null;

}

/**

* 是否不为 null

*

* @param o

* @return 不为 null 返回 true

*/

public static boolean isNotNull(Object o) {

return !isNull(o);

}

/**

* 是否是0 ,

*

* @param bigDecimal

* @return 0 返回true

*/

public static boolean isZeroDecimal(BigDecimal bigDecimal) {

return isNotNull(bigDecimal) && bigDecimal.compareTo(BigDecimal.ZERO) == 0;

}

/**

* 是否不是 0

*

* @param bigDecimal

* @return 不是0 返回true

*/

public static boolean isNotZeroDecimal(BigDecimal bigDecimal) {

return !isZeroDecimal(bigDecimal);

}

/**

* 是否是 1

*

* @param bigDecimal

* @return 是 1 返回true

*/

public static boolean isOneDecimal(BigDecimal bigDecimal) {

return isNotNull(bigDecimal) && bigDecimal.compareTo(BigDecimal.ONE) == 0;

}

/**

* 是否不是 1

*

* @param bigDecimal

* @return 不是 1 返回true

*/

public static boolean isNotOneDecimal(BigDecimal bigDecimal) {

return bigDecimal.compareTo(BigDecimal.ONE) != 0;

}

/**

* 是否是 0 long

*

* @param l

* @return 是 0 long 返回 true

*/

public static boolean isZeroLong(Long l) {

return l != null && l.equals(0L);

}

/**

* 是否不是 0 long

*

* @param l

* @return 不是 0 long 返回 true

*/

public static boolean isNotZeroLong(Long l) {

return !isZeroLong(l);

}

/**

* 是否是 0 int

*

* @param l

* @return 是 0 int 返回 true

*/

public static boolean isZeroInt(Integer l) {

return l != null && l.equals(0);

}

/**

* 是否不是 0 int

*

* @param l

* @return 不是 0 int 返回 true

*/

public static boolean isNotZeroInt(Integer l) {

return !isZeroInt(l);

}

/**

* 两个 decimal 是否相等

*

* @param i

* @param j

* @return 相等返回 true

*/

public static boolean isSameDecimal(BigDecimal i, BigDecimal j) {

return i.compareTo(j) == 0;

}

/**

* 第一个 decimal 是否大于 第二个 decimal

*

* @param i

* @param j

* @return 大于 返回true

*/

public static boolean isDecimalGt(BigDecimal i, BigDecimal j) {

return i.compareTo(j) > 0;

}

/**

* 第一个 decimal 是否小于 第二个 decimal

*

* @param i

* @param j

* @return 小于 返回true

*/

public static boolean isDecimalLt(BigDecimal i, BigDecimal j) {

return i.compareTo(j) < 0;

}

/**

* 特殊字符串处理

*

* @param character

* @return

*/

public static String replaceSpecialCharacter(String character) {

String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";

return ReUtil.replaceAll(character, regEx, "");

}

/**

* 数据分比切割

*

* 比如 p 为 2,要做千分切割,则 h 值为 "1000.00"

* 得到值为 0.002

*

* @param p 输入值

* @param h 切割值

* @return 切割后的值

*/

public static BigDecimal percentFormat(Integer p, String h) {

return new BigDecimal(String.valueOf(p)).divide(new BigDecimal(h), 4, RoundingMode.HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);

}

public static boolean orEq(Object... o) {

if (o.length < 2) {

throw new NullPointerException("长度不足");

}

Object o1 = o[0];

for (int i = 1; i < o.length - 1; i++) {

if (o1.equals(o[i])) {

return true;

}

}

return false;

}

/**

* 包含边界值

*

* @param number 检查值

* @param min 最小

* @param max 最大

*/

public static boolean isNumberBetween(Number number, Number min, Number max) {

return number.longValue() >= min.longValue() && number.longValue() <= max.longValue();

}

/**

* 标准数学计算

*/

@NoArgsConstructor(access = AccessLevel.PRIVATE)

public static class Math {

/**

* 精确的表示分数的数学计算,因为使用double 等会丢失精度

*/

@SuppressWarnings("rawtypes")

@Getter

public static class Fraction extends Number implements Comparable {

private static final long serialVersionUID = 2330398718018182597L;

/**

* 定义分子

*/

private long numerator = 0;

/**

* 定义分母

*/

private long denominator = 1;

public Fraction() {

this(0, 1);

}

public Fraction(long numerator, long denominator) {

long gcd = gcd(numerator, denominator);

this.numerator = ((denominator > 0) ? 1 : -1) * numerator / gcd;

this.denominator = java.lang.Math.abs(denominator) / gcd;

}

/**

* 求最大公约数

*/

private long gcd(long f, long s) {

long fAbs = java.lang.Math.abs(f);

long sAbs = java.lang.Math.abs(s);

// 学术名称 Gcd

int _Gcd = 1;

// 欧几里德算法

for (int i = 1; i <= fAbs && i <= sAbs; i++) {

if (fAbs % i == 0 && sAbs % i == 0) {

_Gcd = i;

}

}

return _Gcd;

}

/**

* 分数的加法

*

*/

public Fraction add(Fraction secondRational) {

long n = numerator * secondRational.getDenominator() + denominator * secondRational.getNumerator();

long d = denominator * secondRational.getDenominator();

return new Fraction(n, d);

}

/**

* 分数的减法

*

*/

public Fraction subtract(Fraction secondRational) {

long n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator();

long d = denominator * secondRational.getDenominator();

return new Fraction(n, d);

}

/**

* 分数乘法

*

*/

public Fraction mulitiply(Fraction secondRational) {

long n = numerator * secondRational.getNumerator();

long d = denominator * secondRational.getDenominator();

return new Fraction(n, d);

}

/**

* 分数除法

*

*/

public Fraction divide(Fraction secondRational) {

long n = numerator * secondRational.getDenominator();

long d = denominator * secondRational.numerator;

return new Fraction(n, d);

}

@Override

public String toString() {

if (denominator == 1) {

return numerator + "";

} else {

return numerator + "/" + denominator;

}

}

@SuppressWarnings("all")

@Override

public boolean equals(Object parm1) {

return (this.subtract((Fraction) (parm1))).getNumerator() == 0;

}

@Override

public int compareTo(Object o) {

if ((this.subtract((Fraction) o)).getNumerator() > 0) {

return 1;

} else if ((this.subtract((Fraction) o)).getNumeratohttp://r() > 0) {

return -1;

} else {

return 0;

}

}

@Override

public double doubleValue() {

return numerator * 1.0 / denominator;

}

@Override

public float floatValue() {

return (float) doubleValue();

}

@Override

public int intValue() {

return (int) doubleValue();

}

@Override

public long longValue() {

return (long) doubleValue();

}

}

/**

* @param dividend 被除数

* @param divisor 除数

* @param accuracy 精度

*/

public static BigDecimal divide(BigDecimal dividend, BigDecimal divisor, int accuracy) {

// 0 除以任何数 = 无穷大,任何数除以 0 无法除,都会抛出错误

if (isZeroDecimal(divisor) || isZeroDecimal(dividend)) {

return BigDecimal.ZERO;

}

return dividend.divide(divisor, 16, RoundingMode.HALF_UP).setScale(accuracy, RoundingMode.HALF_UP);

}

/**

* @param f .

* @param s .

* @param accuracy 精度

*/

public static BigDecimal multiply(BigDecimal f, BigDecimal s, int accuracy) {

// 0 * 任何数 = 0

if (isZeroDecimal(f) || isZeroDecimal(s)) {

return BigDecimal.ZERO;

}

return f.multiply(s).setScale(accuracy, RoundingMode.HALF_UP);

}

/**

* 开多次方根

*

*/

public static BigDecimal pow(BigDecimal f, BigDecimal s) {

// 防止出现 Infinity 的情况

if (isZeroDecimal(f) && isDecimalLt(s, BigDecimal.ZERO)) {

return BigDecimal.ZERO;

}

return new BigDecimal(String.valueOf(java.lang.Math.pow(f.doubleValue(), s.doubleValue())));

}

/**

* 获取分数值

*

*/

public static BigDecimal fraction(Fraction f) {

long denominator = f.getDenominator();

long numerator = f.getNumerator();

return divide(new BigDecimal(String.valueOf(numerator)), new BigDecimal(String.valueOf(denominator)), 16);

}

}

}

3、NumberUtils 工具类

package cn.zjcs.common.util;

import lombok.AccessLevel;

import lombok.NoArgsConstructor;

import java.math.BigDecimal;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* @author ..

*/

@NoArgsConstructor(access = AccessLevel.PRIVATE)

public class NumberUtils {

private static final Pattern DIGIT_PATTERN = Pattern.compile("[0-9]*");

/**

* 判断 某个 decimal 是否等于 0

*

* @param decimal BigDecimal 数字

* @return 等于0 返回 true

*/

public static boolean isZeroDecimal(BigDecimal decimal) {

return decimal == null || decimal.compareTo(BigDecimal.ZERO) == 0;

}

/**

* 判断 某个 decimal 是否不等于 0

*

* @param decimal BigDecimal 数字

* @return 不等于0 返回 true

*/

public static boolean isNotZeroDecimal(BigDecimal decimal) {

return decimal != null && decimal.compareTo(BigZjtJJDecimal.ZERO) != 0;

}

/**

* 判断一个字符串是否是数字

*

* @param var 字符串

* @return 是数字返回 true

*/

public static boolean isDigit(String var) {

Matcher isNum = DIGIT_PATTERN.matcher(var);

return isNum.matches();

}

public static boolean isEmptyNumber(Number number) {

return number == null

|| number.intValue() == 0

|| number.longValue() == 0

|| number.doubleValue() == 0.00

|| number.byteValue() == 0

|| number.floatValue() == 0.0

|| number.shortValue() == 0;

}

public static boolean isNotEmptyNumber(Number number) {

return !isEmptyNumber(number);

}

public static boolean isNotZeroLong(Long something) {

if (something == null) {

return false;

}

return !something.equals(0L);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现页面置换算法
下一篇:IDEA2020配置Git的方法步骤
相关文章

 发表评论

暂时没有评论,来抢沙发吧~