Подтвердить что ты не робот

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?

4b9b3361

Ответ 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) также может использоваться для цитирования всей строки. Это возвращает шаблон, который будет интерпретироваться буквально, специальные символы не будут иметь особого значения. В этом случае это может быть излишним, но иногда это может быть полезно.