String.split возвращает значение null при использовании точки
Я получил этот простой код:
String ip = "1.2.3.4";
String[] ipArray = ip.split(".");
System.out.println(ipArray[1]);
И ipArray
имеет значение null к моменту его обращения к System.out.println
(выбрасывает исключение из null-указателя).
Мой вопрос в том, почему ipArray остается нулевым, хотя я устанавливаю его для разделения на каждый из ip.s?
Ответы
Ответ 1
Используйте ip.split("\\.");
, и ваши проблемы будут решены. Проблема в том, что String # split получает регулярное выражение, символ точки (.) Является специальным символом в регулярных выражениях, поэтому вам нужно убежать это для того, чтобы оно интерпретировалось как простая точка, также как обратная косая черта - это escape-символ в Java, вам тоже нужно избегать этого.
Ответ 2
.
- это специальный символ в регулярных выражениях, который используется для разбиения строки.
Чтобы обойти это, вам нужно избежать .
. Это приводит нас к \.
К сожалению, \
является ТАКЖЕ специальным символом в строке java, поэтому это также должно быть экранировано, чтобы сделать \\.
Наш "окончательный" результат ip.split("\\.");
В связанной проблеме весь процесс можно полностью предотвратить. Нет смысла делать то, что уже сделала стандартная библиотека для нас.
Рассмотрим следующее
byte[] ipOctets = InetAddress.getByName(ip).getAddress();
Единственная проблема здесь заключается в том, чтобы помнить, что если вы хотите значение int, вы должны извлечь его с помощью &
, как int octet = ipOctets[0] & 0xFF;
Ответ 3
Pattern.quote(String) также может использоваться для цитирования всей строки. Это возвращает шаблон, который будет интерпретироваться буквально, специальные символы не будут иметь особого значения. В этом случае это может быть излишним, но иногда это может быть полезно.