从Android中的URL中提取主机名/ IP地址

时间:2016-07-02 01:49:12

标签: java android string url substring

假设我保存了http://192.168.0.123:321的网址。我只想提取192.168.0.123.I可以通过使用此方法来完成此操作 url.toString().substring(7,(url.length()-4));

但是如果保存的网址是http://192.168.0.1:12怎么办?如何自动提取IP地址呢?因为我刚使用的方法会显示192.168.0.而不是

修改 我在Android Studio上使用Java

编辑2 我用了

str = url.toString(); ip = str.substring(str.indexOf('/')+1, str.lastIndexOf(':');

因为第二个让我崩溃,我找不到解决方法

2 个答案:

答案 0 :(得分:2)

修改! : 对于Android(Java),请使用以下代码:

(new URL(urlToParse)).getHost();

或者如果您已经有一个URL对象,只有getHost()方法(对于主机名)

getAuthority() - (对于主机名:端口)

其他部分请咨询https://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html

您使用的是哪种语言?

如果使用您选择的语言,可以使用String.split(':')或String.lastIndexOf(':')(和indexof'/')?

你也可以使用regex - 正则表达式,但这对于这么简单的任务来说可能是一种过度杀伤力。但它肯定更准确/更正确。

此外,还有许多语言为您提取URL解析,以提取主机名/ IP地址。

天真的方法:

str = url.toString();
ip = str.substring(str.indexOf('/')+1, str.lastIndexOf(':');

不太天真的方法:

str = url.toString();
ip = str.split('/')[2].split(':')[0];

正则表达式(仅适用于基于IP地址的网址):

/$https?:\/\/([0-9\.]*?)(:[0-9]*?)?/

答案 1 :(得分:-1)

    String s = "http://192.168.0.123:321";
    s = s.substring(s.indexOf("://"), s.indexOf(":"));

    Output: 192.168.0.123