InetAddress.toString()返回正斜杠

时间:2012-10-18 05:01:35

标签: java

我有一个DatagramPacket类型的可变数据包。虽然packet.getAddress().toString()导致表示IP地址的字符串,但它在字符串的开头附加了额外的/

/127.0.0.1

我可以轻松删除前导'/',但有没有更好的方法来获取IP的字符串表示?我很担心,因为在其他情况下会有更多'/'

谢谢!

2 个答案:

答案 0 :(得分:21)

使用以下内容:

packet.getAddress().getHostAddress()

来自documentation

  

以文本表示形式返回IP地址字符串。

InetAddress.toString()对比:

  

将此IP地址转换为String。返回的字符串格式为:hostname / literal IP address。如果主机名未解析,则不执行反向名称服务查找。主机名部分将由空字符串表示。

答案 1 :(得分:5)

如果您只想要IP,请使用主机地址:

String address = InetAddress.getByName("stackoverflow.com").getHostAddress();

如果您只想要主机名,请使用

String hostname = InetAddress.getByName("stackoverflow.com").getHostName();

您看到的斜杠可能是在您尝试将其打印出来时对返回的InetAddress执行隐式toString(),这会打印由斜杠分隔的主机名和地址(例如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本质上保持两个字段分开。