IPAddressUtil

Das ist ein Prototyp einer Util-Klasse für IP-Adressen.
Ziel ist es eine IP-Adresse validieren zu können und außerdem führende Nullen zu entfernen bzw. hinzufügen zu können.

Leider funktioniert das Ganze momentan nur mit IP v4 Adressen.

Zum Kompilieren werden noch die StringUtils aus commons-lang benötigt!

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

/**
 * This is a small util-class for IP addresses.
 * NOTE: Currently works with IP v4 addresses only!
 * @author oldzitterhand
 */
public class IPAddressUtil {

   /** the pattern for IP v4 addresses **/
   private static final String IPADDRESS_V4_PATTERN =
      "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
      "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
      "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
      "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
	
      private Pattern pattern;
      private Matcher matcher;

   /** default constructor for this class **/
   public IPAddressUtil(){
      pattern = Pattern.compile(IPADDRESS_V4_PATTERN);
   }
	
   /**
    * Validate IP v4 address with regular expression
    * @param ipAddress IP v4 address for validation
    * @return true valid IP v4 address, false invalid IP v4 address
    */
   public boolean validate(final String ipAddress){
      if(ipAddress != null) {
         matcher = pattern.matcher(ipAddress);
         return matcher.matches();
      } else {
         return false;
      }
   }

   /**
    * Adds leading zeros to the IP address
    * @param ipAddress the IP address
    * @return the IP address with leading zeros
    */
   public String addLeadingZeros(final String ipAddress) {
      if (validate(ipAddress)) {
         String[] parts = StringUtils.split(ipAddress, '.');
         List<String> res = new ArrayList<String>(parts.length);
         for(String part : parts) {
            res.add(String.format("%03d", Integer.parseInt(part)));
         }
         return StringUtils.join(res, '.');
      } else {
         return ipAddress;
      }
   }
	
   /**
    * Removes leading zeros from the given IP address
    * @param ipAddress the IP address
    * @return the IP address without leading zeros
    */
   public String removeLeadingZeros(String ipAddress) {
      if (validate(ipAddress)) {
         return ipAddress.replaceAll("\\b(?:0*?)([1-9]\\d*|0)\\b", "$1");
      } else {
         return ipAddress;
      }
   }
}

Test kann man die Klasse zum Beispiel so:

   String[] ips = {"12.34.234.123", "012.034.234.123", "1012.034.234.123",
                   "hugo", null, "0.0.0.0", "127.0.0.0", "1.2.3.4"};
   IPAddressUtil util = new IPAddressUtil();
   for(String ip : ips) {
      System.err.println("ip address valid: " + util.validate(ip));
   }

   for(String ip : ips) {
      System.err.println("without leading zeros: " + util.removeLeadingZeros(ip));
   }

   for(String ip : ips) {
      System.err.println("with leading zeros: " + util.addLeadingZeros(ip));
   }

Das ergibt folgende Ausgabe:

ip address valid: true
ip address valid: true
ip address valid: false
ip address valid: false
ip address valid: false
ip address valid: true
ip address valid: true
ip address valid: true
without leading zeros: 12.34.234.123
without leading zeros: 12.34.234.123
without leading zeros: 1012.034.234.123
without leading zeros: hugo
without leading zeros: null
without leading zeros: 0.0.0.0
without leading zeros: 127.0.0.0
without leading zeros: 1.2.3.4
with leading zeros: 012.034.234.123
with leading zeros: 012.034.234.123
with leading zeros: 1012.034.234.123
with leading zeros: hugo
with leading zeros: null
with leading zeros: 000.000.000.000
with leading zeros: 127.000.000.000
with leading zeros: 001.002.003.004

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

*