溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java要如何判斷字符串是不是IP地址

發(fā)布時(shí)間:2020-08-10 09:53:01 來(lái)源:億速云 閱讀:364 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Java要如何判斷字符串是不是IP地址,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

1、代碼

主要就是這么幾個(gè)條件

  • 非空
  • 長(zhǎng)度符合 0.0.0.0 - 255.255.255.255
  • 包含分隔符 且 個(gè)數(shù)正確
  • 四個(gè)全部是數(shù)字,且都在合理的范圍內(nèi)
     
 /**
 * 判斷某個(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 = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/&#63;~!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";
 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) &#63; 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è)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI