3

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

用户输入示例:10.120.10.3

需要的输出:10.120.10

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

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

truncated_IP[0]应该包含我正在寻找的内容。

4

6 回答 6

11

不要使用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
于 2013-10-01T18:50:14.570 回答
2

你可以使用substringand lastIndexOf,像这样:

user_IP.substring(0, user_IP.lastIndexOf('.'))
于 2013-10-01T18:51:11.650 回答
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());
            }
      }
于 2013-10-01T18:56:51.830 回答
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]

于 2013-10-01T19:02:17.910 回答
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

` 并返回一个字符串,除了最后一个。

于 2013-10-01T18:53:04.593 回答
0

IPAddress Java 库以多态方式同时支持 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
于 2019-04-07T21:39:44.227 回答