拆分字符串以截断IP地址的最后一个八位字节

时间:2013-10-01 18:47:51

标签: java

我想解析一个IP地址并删除最后一个八位字节,但我不知道在Java的String拆分方法中使用哪个正则表达式。

示例用户输入:10.120.10.3

需要输出:10.120.10

我正在考虑这样的事情,但需要一种方法来在第三个点之后找到并分开:

String[] truncated_IP = user_IP.split("\\.");

truncated_IP[0]应该包含我要找的内容。

6 个答案:

答案 0 :(得分:9)

请勿使用split(),请使用lastIndexOf()

input.substring(0, input.lastIndexOf('.'))

使用您的示例:

String input = "10.120.10.3";
System.out.println(input.substring(0, input.lastIndexOf('.')));
10.120.10

如果您真的想使用split(),可以使用正则表达式\.(?=[^.]+$)来完成:

input.split("\\.(?=[^.]+$)")[0]

再次,使用您的示例:

String input = "10.120.10.3";
System.out.println(input.split("\\.(?=[^.]+$)")[0]);
10.120.10

答案 1 :(得分:2)

您可以使用substringlastIndexOf,如下所示:

user_IP.substring(0, user_IP.lastIndexOf('.'))

答案 2 :(得分:1)

你可以写一个正则表达式来从字符串

获取IPAddress
      public void findMe(){
            String regex = "(\\d*[.]){2}\\d";

            Matcher matcher = Pattern.compile(regex).matcher("192.168.1.123");

            if (matcher.find()){
                System.out.print(matcher.group());
            }
      }

答案 3 :(得分:1)

这是一个应该工作的正则表达式模式。它也返回子类,但第一个元素应始终是C类子网。

var ip = "10.100.243.10";
var classCRegex = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5]).";

var subIP = ip.match(classCRegex)[0];

console.log(subIP);

结果:[10.100.243]

答案 4 :(得分:0)

使用拆分 - `代码:

    String s = "10.11.12.13";

    String sPlit[] =s.split("\\.");

    for(int i = 0; i < sPlit.length; i++){
        System.out.println(sPlit[i]);
    }

输出:

10

11

12

13

` 并返回一个包含除最后一个之外的所有字符串。

答案 5 :(得分:0)

The IPAddress Java library以一种多态的方式同时支持IPv4和IPv6,因此它可以以更通用的方式做到这一点,支持所有可能的IPv4和IPv6字符串格式。免责声明:我是该库的项目经理。

此示例方法将截断最后一个段,即IPv4中的最后一个八位位组:

static void truncateLastSegment(String str) {
    IPAddress addr = new IPAddressString(str).getAddress();
    IPAddressSection section = addr.getSection(0, addr.getSegmentCount() - 1);
    System.out.println("truncated: " + section);
}

在您的示例以及IPv6示例中进行尝试:

truncateLastSegment("10.120.10.3");
truncateLastSegment("2001:db8:0:1234:0:567:8:1");

输出:

truncated: 10.120.10
truncated: 2001:db8:0:1234:0:567:8