在Java中是否有一种将字符串转换为Inetaddress的简单方法?

在Java中是否有一种将字符串转换为Inetaddress的简单方法?,java,string,inetaddress,Java,String,Inetaddress,我正在尝试将字符串转换为Inetaddress。我没有尝试解析主机名:字符串是ipv4地址。InetAddress.getByName(字符串主机)有效吗?或者我必须手动解析它吗?是的,可以。这一点非常清楚(“主机名可以是机器名,如“java.sun.com”,也可以是其IP地址的文本表示形式。”),当然,您可以轻松地检查自己。com.google.common.net.inetaddress.forString(String ipString)更好,因为无论传递给它的字符串是什么,它都不会执行

我正在尝试将字符串转换为
Inetaddress
。我没有尝试解析主机名:字符串是ipv4地址。
InetAddress.getByName(字符串主机)
有效吗?或者我必须手动解析它吗?

是的,可以。这一点非常清楚(“主机名可以是机器名,如“java.sun.com”,也可以是其IP地址的文本表示形式。”),当然,您可以轻松地检查自己。

com.google.common.net.inetaddress.forString(String ipString)
更好,因为无论传递给它的字符串是什么,它都不会执行DNS查找。

您可以在将
字符串
传递给
getByName()
之前尝试。然后,
getByName()
将不会尝试名称解析。

注意:解析无效地址(如
InetAddress.getByName(“999.999.999.999”
)似乎不会导致文档短语中预期的异常:

将检查地址格式的有效性

根据经验,我发现自己得到了一个InetAddress实例,其中本地机器的原始IP地址和无效IP地址作为主机名。当然,这不是我所期望的

将验证IPv6和IPv4的所有标准表示形式,并且将在不进行DNS查找的情况下进行验证。免责声明:我是该库的项目经理

以下代码将执行您的请求:

     String s = "1.2.3.4";
     try {
            IPAddressString str = new IPAddressString(s);
            IPAddress addr = str.toAddress();
            InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6
            if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific
                IPv4Address ipv4Addr = addr.toIPv4();
                Inet4Address inetAddr = ipv4Addr.toInetAddress();
                //use address
            }
      } catch(AddressStringException e) {
            //e.getMessage has validation error
      }

谢谢,我查了api,没查到那一行。当主机是192.168.0这样的模式时会发生什么?那也行吗?关于Inet4Address文档,似乎对此有支持。@Paranaix,否,它将抛出一个带有消息“无效主机通配符规范”的
IllegalArgumentException
,特别是,文档中说:
如果提供了文本IP地址,只检查地址格式的有效性。
我读作:'如果指定(虚线四元符号)IP地址,则不会执行DNS查找'。OP说“我不尝试解析主机名”;如果
getByName()
的输入不是有效的数字IP地址,而是有效的可解析DNS名称,则将解析该名称。这似乎不是OP想要的。这是一部分。它应该是
com.google.common.net.InetAddresses.forString
(带
InetAddresses
,带大写字母A)。所以不允许我在您的答案中更正,因为编辑必须至少为6个字符。;-)无论如何,谢谢,我一直在寻找它,番石榴再一次拯救了这一天;我还没有检查早期的Java,但我也希望出现异常。