Используйте system ("cls")
, чтобы очистить экран:
#include & lt; stdlib.h & gt; int main (void) {system ("cls"); return 0; }
Довольно просто с регулярным выражением (но обратите внимание, что это гораздо менее эффективно и гораздо труднее читать, чем ответ на вызов, который использует утилиту Apache Commons)
private static final Pattern PATTERN = Pattern.compile(
"^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
public static boolean validate(final String ip) {
return PATTERN.matcher(ip).matches();
}
На основании сообщения Mkyong
Вы можете использовать эту функцию -
public static boolean validate(final String ip) {
String PATTERN = "^((0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)\\.){3}(0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)$";
return ip.matches(PATTERN);
}
Если вы не заботитесь о диапазоне, следующее выражение будет полезно для проверки с 1.1.1.1 до 999.999.999.999
"[1-9]{1,3}\\.[1-9]{1,3}\\.[1-9]{1,3}\\.[1-9]{1,3}"
Регулярное выражение - наиболее эффективный способ решить эту проблему. Посмотрите на код ниже. Вдобавок, он также проверяет класс IP-адреса, в котором он принадлежит, и является ли он зарезервированным IP-адресом или нет
Pattern ipPattern;
int[] arr=new int[4];
int i=0;
//Method to check validity
private String validateIpAddress(String ipAddress) {
Matcher ipMatcher=ipPattern.matcher(ipAddress);
//Condition to check input IP format
if(ipMatcher.matches()) {
//Split input IP Address on basis of .
String[] octate=ipAddress.split("[.]");
for(String x:octate) {
//Convert String number into integer
arr[i]=Integer.parseInt(x);
i++;
}
//Check whether input is Class A IP Address or not
if(arr[0]<=127) {
if(arr[0]==0||arr[0]==127)
return(" is Reserved IP Address of Class A");
else if(arr[1]==0&&arr[2]==0&&arr[3]==0)
return(" is Class A Network address");
else if(arr[1]==255&&arr[2]==255&&arr[3]==255)
return( " is Class A Broadcast address");
else
return(" is valid IP Address of Class A");
}
//Check whether input is Class B IP Address or not
else if(arr[0]>=128&&arr[0]<=191) {
if(arr[2]==0&&arr[3]==0)
return(" is Class B Network address");
else if(arr[2]==255&&arr[3]==255)
return(" is Class B Broadcast address");
else
return(" is valid IP Address of Class B");
}
//Check whether input is Class C IP Address or not
else if(arr[0]>=192&&arr[0]<=223) {
if(arr[3]==0)
return(" is Class C Network address");
else if(arr[3]==255)
return(" is Class C Broadcast address");
else
return( " is valid IP Address of Class C");
}
//Check whether input is Class D IP Address or not
else if(arr[0]>=224&&arr[0]<=239) {
return(" is Class D IP Address Reserved for multicasting");
}
//Execute if input is Class E IP Address
else {
return(" is Class E IP Address Reserved for Research and Development by DOD");
}
}
//Input not matched with IP Address pattern
else
return(" is Invalid IP Address");
}
public static void main(String[] args) {
Scanner scan= new Scanner(System.in);
System.out.println("Enter IP Address: ");
//Input IP Address from user
String ipAddress=scan.nextLine();
scan.close();
IPAddress obj=new IPAddress();
//Regex for IP Address
obj.ipPattern=Pattern.compile("((([0-1]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([0-1]?\\d\\d?|2[0-4]\\d|25[0-5]))");
//Display output
System.out.println(ipAddress+ obj.validateIpAddress(ipAddress));
}
Обратите внимание на класс IPAddressUtil OOTB, присутствующий в sun.net.util, который должен вам помочь.
Существует также недокументированный класс утилиты sun.net.util.IPAddressUtil
, который вы не должны использовать , хотя это может быть полезно в быстрой одноразовой утилите:
boolean isIP = IPAddressUtil.isIPv4LiteralAddress(ipAddressString);
Внутри этого класса используется класс утилиты InetAddress
для анализа IP-адресов.
Обратите внимание, что это вернет true для строк типа «123», которые технически являются действительными адресами IPv4 , только не в десятичной системе счисления.
0xx, 0x
.
– khachik
14 April 2011 в 19:05
128.009.000.032
в качестве примера на стр. 5.
– Jason C
24 March 2014 в 19:46
Это для Android, тестирование для IPv4 и IPv6
Примечание: обычно используемый InetAddressUtils
устарел. Используйте новые классы InetAddress
public static Boolean isIPv4Address(String address) {
if (address.isEmpty()) {
return false;
}
try {
Object res = InetAddress.getByName(address);
return res instanceof Inet4Address || res instanceof Inet6Address
} catch (final UnknownHostException ex) {
return false;
}
}
Если это IP4, вы можете использовать регулярное выражение следующим образом:
^(2[0-5][0-5])|(1\\d\\d)|([1-9]?\\d)\\.){3}(2[0-5][0-5])|(1\\d\\d)|([1-9]?\\d)$
.
Существует так много способов добиться этого, но регулярное выражение более эффективно.
Посмотрите на код ниже:
public static void main(String[] args) {
String ipStr1 = "255.245.188.123"; // valid IP address
String ipStr2 = "255.245.188.273"; // invalid IP address - 273 is greater than 255
validateIP(ipStr1);
validateIP(ipStr2);
}
public static void validateIP(String ipStr) {
String regex = "\\b((25[0–5]|2[0–4]\\d|[01]?\\d\\d?)(\\.)){3}(25[0–5]|2[0–4]\\d|[01]?\\d\\d?)\\b";
System.out.println(ipStr + " is valid? " + Pattern.matches(regex, ipStr));
}
Библиотека Java IPAddress сделает это. Javadoc доступен по ссылке. Отказ от ответственности: я руководитель проекта.
Эта библиотека поддерживает прозрачность IPv4 и IPv6, поэтому проверка либо работает так же, как и ниже, и также поддерживает подсерии CIDR.
Проверьте, адрес действителен
String str = "1.2.3.4";
IPAddressString addrString = new IPAddressString(str);
try {
IPAddress addr = addrString.toAddress();
...
} catch(AddressStringException e) {
//e.getMessage provides validation issue
}
Запишите подходящее регулярное выражение и подтвердите его. JVM имеют полную поддержку регулярных выражений.
public static boolean isIpv4(String ipAddress) {
if (ipAddress == null) {
return false;
}
String ip = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
Pattern pattern = Pattern.compile(ip);
Matcher matcher = pattern.matcher(ipAddress);
return matcher.matches();
}
Использовать InetAddresses.forString () Guava
try {
InetAddresses.forString(ipStr);
} catch (IllegalArgumentException e) {
...
}
Попробуйте использовать служебный класс InetAddressValidator.
Документы здесь:
Загрузить здесь:
Вы можете использовать регулярное выражение, например:
(([0-1]?[0-9]{1,2}\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))
Этот параметр подтверждает, что значения находятся в пределах диапазона.
Android поддерживает регулярные выражения. См. java.util.regex.Pattern .
class ValidateIPV4
{
static private final String IPV4_REGEX = "(([0-1]?[0-9]{1,2}\\.)|(2[0-4][0-9]\\.)|(25[0-5]\\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))";
static private Pattern IPV4_PATTERN = Pattern.compile(IPV4_REGEX);
public static boolean isValidIPV4(final String s)
{
return IPV4_PATTERN.matcher(s).matches();
}
}
Чтобы избежать повторной компиляции шаблона снова и снова, лучше всего поместить вызов Pattern.compile()
, чтобы он выполнялся только один раз.
0xx, 0x
.
– khachik
14 April 2011 в 19:05
128.009.000.032
в качестве примера на стр. 5.
– Jason C
24 March 2014 в 19:46