public class CheckIp {

    public static boolean isInteger(String s) {
	try {
	    Integer.parseInt(s);
	    return true;
	} catch (NumberFormatException nfe) {
	    return false;
	}
    }
    
    public static boolean check(String ip) {
	
	String[] c = ip.split("\\.");
	
	// vérifie que l'on est bien de la forme X.X.X.X
	if (c.length != 4) {
            return false;
	}

	// les points en fin de chaine ne sont pas détectés par split
	if (ip.endsWith(".")) {
	    return false;
	}

	if (c[0].equals("0")) {
	    return false;
	}
	
	// vérifie chacun des X
	for (String s : c) {
	    if (!isInteger(s)) {
		return false;
	    }
	    
	    int value = Integer.parseInt(s);
	    if ((value < 0) || (value > 255)) {
                return false;
	    }
	}
	
        return true;
    }

    public static void testCheckIP() {

	String[] validIp = {"127.0.0.1",
			    "127.231.1.1",
			    "1.2.3.4"};
	
	String[] invalidIp = {"12.2.3",
			      "12.3.213.123.123",
			      "1231.12.2.3",
			      ".1.2.3",
			      "1.2.3.",
			      "1.2..3",
			      "0.1.2.3"};
	

	for (String ip : validIp) {
	    if (!check(ip)) {
		System.out.println("erreur: " + ip);
	    }
	}

	for (String ip : invalidIp) {
	    if (check(ip)) {
		System.out.println("erreur: " + ip);
	    }
	}

    }

    public static void main(String[] args) {
	testCheckIP();
    }
    
}
