InetAddress.toString()返回正斜杠

Mik*_*e G 16 java

我有一个类型的可变数据包DatagramPacket.虽然packet.getAddress().toString()结果表示一个字符串代表一个IP地址,但它有一个额外的/附加到字符串的开头:

/127.0.0.1
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Pau*_*ora 23

使用以下内容:

packet.getAddress().getHostAddress()
Run Code Online (Sandbox Code Playgroud)

文档:

返回文本表示中的IP地址字符串.

对比InetAddress.toString():

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


Ani*_*nge 5

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

String address = InetAddress.getByName("stackoverflow.com").getHostAddress();
Run Code Online (Sandbox Code Playgroud)

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

String hostname = InetAddress.getByName("stackoverflow.com").getHostName();
Run Code Online (Sandbox Code Playgroud)

您看到的斜杠可能是在您尝试将其打印出来时对返回的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];
Run Code Online (Sandbox Code Playgroud)

但是根本没有理由去这里的String中介.InetAddress本质上保持两个字段分开.