我想解析一个 IP 地址并去掉最后一个八位字节,但我不知道在 Java 的字符串拆分方法中使用哪个正则表达式。
用户输入示例:10.120.10.3
需要的输出:10.120.10
我在想这样的事情,但需要一种方法在第三个点之后找到并分开:
String[] truncated_IP = user_IP.split("\\.");
truncated_IP[0]
应该包含我正在寻找的内容。
我想解析一个 IP 地址并去掉最后一个八位字节,但我不知道在 Java 的字符串拆分方法中使用哪个正则表达式。
用户输入示例:10.120.10.3
需要的输出:10.120.10
我在想这样的事情,但需要一种方法在第三个点之后找到并分开:
String[] truncated_IP = user_IP.split("\\.");
truncated_IP[0]
应该包含我正在寻找的内容。
不要使用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
你可以使用substring
and lastIndexOf
,像这样:
user_IP.substring(0, user_IP.lastIndexOf('.'))
您可以编写一个正则表达式来从字符串中获取 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());
}
}
这是一个应该起作用的正则表达式模式。它也返回子类,但第一个元素应该始终是 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]
使用拆分 - `代码:
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
` 并返回一个字符串,除了最后一个。
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