Java判斷字符串是否為IP地址的方法
更新時間:2020年08月09日 08:45:37 作者:簡簡單單OnlineZuozuo
這篇文章主要為大家詳細介紹了Java判斷字符串是否為IP地址的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
Java 判斷字符串是否為IP地址,供大家參考,具體內(nèi)容如下
1、代碼
主要就是這么幾個條件
- 非空
- 長度符合 0.0.0.0 - 255.255.255.255
- 包含分隔符 且 個數(shù)正確
- 四個全部是數(shù)字,且都在合理的范圍內(nèi)
/**
* 判斷某個字符串是否是一個 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 = ".";
// 包含分隔符 且 個數(shù)正確
if (str.contains(regex) && str.split(regex).length == 4) {
boolean legalNumber = true;
// 四個全部是數(shù)字,且都在合理的范圍內(nèi)
for (String obj : Lists.newArrayList(str.split(regex))) {
if (NumberUtils.isDigit(obj)) {
Integer value = Integer.parseInt(obj);
legalNumber = CommonUtils.isNumberBetween(value, 0, 255);
} else {
// 任意一個不是數(shù)字,不合法
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, "");
}
/**
* 數(shù)據(jù)分比切割
* <p>
* 比如 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();
}
/**
* 標準數(shù)學(xué)計算
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public static class Math {
/**
* 精確的表示分數(shù)的數(shù)學(xué)計算,因為使用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;
}
/**
* 求最大公約數(shù)
*/
private long gcd(long f, long s) {
long fAbs = java.lang.Math.abs(f);
long sAbs = java.lang.Math.abs(s);
// 學(xué)術(shù)名稱 Gcd
int _Gcd = 1;
// 歐幾里德算法
for (int i = 1; i <= fAbs && i <= sAbs; i++) {
if (fAbs % i == 0 && sAbs % i == 0) {
_Gcd = i;
}
}
return _Gcd;
}
/**
* 分數(shù)的加法
*
*/
public Fraction add(Fraction secondRational) {
long n = numerator * secondRational.getDenominator() + denominator * secondRational.getNumerator();
long d = denominator * secondRational.getDenominator();
return new Fraction(n, d);
}
/**
* 分數(shù)的減法
*
*/
public Fraction subtract(Fraction secondRational) {
long n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator();
long d = denominator * secondRational.getDenominator();
return new Fraction(n, d);
}
/**
* 分數(shù)乘法
*
*/
public Fraction mulitiply(Fraction secondRational) {
long n = numerator * secondRational.getNumerator();
long d = denominator * secondRational.getDenominator();
return new Fraction(n, d);
}
/**
* 分數(shù)除法
*
*/
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)).getNumerator() > 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 被除數(shù)
* @param divisor 除數(shù)
* @param accuracy 精度
*/
public static BigDecimal divide(BigDecimal dividend, BigDecimal divisor, int accuracy) {
// 0 除以任何數(shù) = 無窮大,任何數(shù)除以 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 * 任何數(shù) = 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) {
// 防止出現(xiàn) Infinity 的情況
if (isZeroDecimal(f) && isDecimalLt(s, BigDecimal.ZERO)) {
return BigDecimal.ZERO;
}
return new BigDecimal(String.valueOf(java.lang.Math.pow(f.doubleValue(), s.doubleValue())));
}
/**
* 獲取分數(shù)值
*
*/
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 數(shù)字
* @return 等于0 返回 true
*/
public static boolean isZeroDecimal(BigDecimal decimal) {
return decimal == null || decimal.compareTo(BigDecimal.ZERO) == 0;
}
/**
* 判斷 某個 decimal 是否不等于 0
*
* @param decimal BigDecimal 數(shù)字
* @return 不等于0 返回 true
*/
public static boolean isNotZeroDecimal(BigDecimal decimal) {
return decimal != null && decimal.compareTo(BigDecimal.ZERO) != 0;
}
/**
* 判斷一個字符串是否是數(shù)字
*
* @param var 字符串
* @return 是數(shù)字返回 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);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Java實現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換
- 基于Java實現(xiàn)獲取本地IP地址和主機名
- java如何獲取本機IP地址
- java IP地址網(wǎng)段計算的示例代碼
- Java實現(xiàn)復(fù)原IP地址的方法
- java 偽造http請求ip地址的方法
- java獲取ip地址與網(wǎng)絡(luò)接口的方法示例
- Java 根據(jù)網(wǎng)址查詢DNS/IP地址的方法
- Java利用Request請求如何獲取IP地址對應(yīng)的省份、城市詳解
- Java利用Request請求獲取IP地址的方法詳解
- JAVA如何獲取客戶端IP地址和MAC地址
- Java獲取電腦真實IP地址的示例代碼
相關(guān)文章
將java程序打成jar包在cmd命令行下執(zhí)行的方法
這篇文章主要給大家介紹了關(guān)于將java程序打成jar包在cmd命令行下執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
java中使用session監(jiān)聽實現(xiàn)同帳號登錄限制、登錄人數(shù)限制
本文主要介紹了java中使用session監(jiān)聽實現(xiàn)同帳號登錄限制、登錄人數(shù)限制,通過session來監(jiān)聽在線人數(shù)和登陸限制,有需要的童鞋可以了解一下。2016-10-10
解決SpringAop內(nèi)部調(diào)用時不經(jīng)過代理類的問題
這篇文章主要介紹了解決SpringAop內(nèi)部調(diào)用時不經(jīng)過代理類的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java中invokedynamic字節(jié)碼指令問題
這篇文章主要介紹了Java中invokedynamic字節(jié)碼指令問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04

