您好,登錄后才能下訂單哦!
小編給大家分享一下Java要如何判斷字符串是不是IP地址,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
1、代碼
主要就是這么幾個(gè)條件
/** * 判斷某個(gè)字符串是否是一個(gè) IP 地址 * * @param str 字符串 */ public static boolean isIpStr(String str) { // 非空 // boolean notBlank = StringUtils.isNotBlank(str); // 長(zhǎng)度符合 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 = "."; // 包含分隔符 且 個(gè)數(shù)正確 if (str.contains(regex) && str.split(regex).length == 4) { boolean legalNumber = true; // 四個(gè)全部是數(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 { // 任意一個(gè)不是數(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); } /** * 兩個(gè) decimal 是否相等 * * @param i * @param j * @return 相等返回 true */ public static boolean isSameDecimal(BigDecimal i, BigDecimal j) { return i.compareTo(j) == 0; } /** * 第一個(gè) decimal 是否大于 第二個(gè) decimal * * @param i * @param j * @return 大于 返回true */ public static boolean isDecimalGt(BigDecimal i, BigDecimal j) { return i.compareTo(j) > 0; } /** * 第一個(gè) decimal 是否小于 第二個(gè) 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("長(zhǎng)度不足"); } 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(); } /** * 標(biāo)準(zhǔn)數(shù)學(xué)計(jì)算 */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public static class Math { /** * 精確的表示分?jǐn)?shù)的數(shù)學(xué)計(jì)算,因?yàn)槭褂胐ouble 等會(huì)丟失精度 */ @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; } /** * 分?jǐn)?shù)的加法 * */ public Fraction add(Fraction secondRational) { long n = numerator * secondRational.getDenominator() + denominator * secondRational.getNumerator(); long d = denominator * secondRational.getDenominator(); return new Fraction(n, d); } /** * 分?jǐn)?shù)的減法 * */ public Fraction subtract(Fraction secondRational) { long n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator(); long d = denominator * secondRational.getDenominator(); return new Fraction(n, d); } /** * 分?jǐn)?shù)乘法 * */ public Fraction mulitiply(Fraction secondRational) { long n = numerator * secondRational.getNumerator(); long d = denominator * secondRational.getDenominator(); return new Fraction(n, d); } /** * 分?jǐn)?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ù) = 無(wú)窮大,任何數(shù)除以 0 無(wú)法除,都會(huì)拋出錯(cuò)誤 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); } /** * 開(kāi)多次方根 * */ 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()))); } /** * 獲取分?jǐn)?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]*"); /** * 判斷 某個(gè) decimal 是否等于 0 * * @param decimal BigDecimal 數(shù)字 * @return 等于0 返回 true */ public static boolean isZeroDecimal(BigDecimal decimal) { return decimal == null || decimal.compareTo(BigDecimal.ZERO) == 0; } /** * 判斷 某個(gè) decimal 是否不等于 0 * * @param decimal BigDecimal 數(shù)字 * @return 不等于0 返回 true */ public static boolean isNotZeroDecimal(BigDecimal decimal) { return decimal != null && decimal.compareTo(BigDecimal.ZERO) != 0; } /** * 判斷一個(gè)字符串是否是數(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); } }
看完了這篇文章,相信你對(duì)Java要如何判斷字符串是不是IP地址有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。