Разобрать его в InetAddress , затем проверить его байтов .
int slash = cidr.indexOf('/');
String ip = cidr.substring(0, slash);
InetAddress address = InetAddress.getByName(ip);
byte[] bytes = address.getAddress();
boolean privateAddress =
(bytes[0] == 10) ||
(bytes[0] == (byte) 172 && (bytes[1] >= 16 && bytes[1] < 32)) ||
(bytes[0] == (byte) 192 && bytes[1] == (byte) 168);
Или вы можете просто проверить строку напрямую:
boolean privateAddress =
cidr.startsWith("10.") || cidr.startsWith("192.168.") ||
cidr.matches("172\\.(1[6-9]|2[0-9]|3[01])\\..*");
Лично я бы выбрал первый подход;короче не всегда лучше.Я бы предпочел использовать синтаксический анализатор, который обрабатывает каждый угловой случай записи адреса IPv4.