InetAddress.toString() возвращает косую черту
У меня есть переменная пакет типа DatagramPacket
. В то время как packet.getAddress().toString()
выводит строку, представляющую IP-адрес, у нее есть дополнительный /
, добавленный к началу строки:
/127.0.0.1
Я могу легко удалить ведущий '/'
, но есть ли лучший способ просто получить строковое представление IP? Я беспокоюсь, потому что, если в других ситуациях больше '/'
.
Спасибо!
Ответы
Ответ 1
Используйте следующее:
packet.getAddress().getHostAddress()
В документации :
Возвращает строку IP-адреса в текстовом представлении.
Сравните это с InetAddress.toString()
:
Преобразует этот IP-адрес в String
. Возвращаемая строка имеет вид: hostname/literal IP-адрес. Если имя хоста не разрешено, поиск обратного имени не выполняется. Часть имени хоста будет представлена пустой строкой.
Ответ 2
Если вам нужен IP-адрес, используйте адрес хоста:
String address = InetAddress.getByName("stackoverflow.com").getHostAddress();
Если вы просто хотите имя хоста, используйте
String hostname = InetAddress.getByName("stackoverflow.com").getHostName();
Слэш, который вы видите, вероятно, когда вы используете неявный toString() в возвращаемом InetAddress при попытке распечатать его, который печатает имя и адрес хоста, разделенные косой чертой (например, stackoverflow.com/64.34. 119,12). Вы можете использовать
String address = InetAddress.getByName("stackoverflow.com").toString().split("/")[1];
String hostname = InetAddress.getByName("stackoverflow.com").toString().split("/")[0];
Но нет никакой причины, чтобы обратиться к String-посреднику. InetAddress сохраняет оба поля отдельно.