Java 从tcpflow输出格式化IP?
Im使用tcpflow记录ip地址,但格式不典型Java 从tcpflow输出格式化IP?,java,regex,Java,Regex,Im使用tcpflow记录ip地址,但格式不典型 089.108.003.152 上述ip地址是tcpflow输出的ip地址。 如何通过regex将其格式化为正确的ip 89.108.3.152 上面的ip是所需格式的示例。这将适用于您: public static void main(String... args) throws Exception { String s = "089.108.003.152"; System.out.println(s.replaceAll
089.108.003.152
上述ip地址是tcpflow输出的ip地址。
如何通过regex将其格式化为正确的ip
89.108.3.152
上面的ip是所需格式的示例。这将适用于您:
public static void main(String... args) throws Exception {
String s = "089.108.003.152";
System.out.println(s.replaceAll("(?<=^|\\.)0+", "")); // positive look - behind for beginning of String or a "."
}
如果您不需要使用正则表达式,则另一种选择是:
InetAddress.getByName("089.108.003.152").getHostAddress();
您可以使用单词边界:
"089.108.003.152".replaceAll("\\b0+\\B", "")
哪个更有效?
String.replaceAll()
方法每次在接受的答案中调用它时都需要编译模式。如果你对效率那么敏感的话,这是相对昂贵的部分。您可能需要调用Pattern.compile(regex)
一次,并在每次出现IP地址字符串时重新使用它进行匹配。关于我的回答,由于假设字符串是IPv4,InetAddress.getByName()
将不会对网络进行查找。因此,根据我的测试,它将生成比接受的答案快一点的结果,每个选项调用100万次。分别是2153毫秒和1372毫秒。如果一个字节为0,这个正则表达式会吃掉所有的零,因此需要改进。例如,010.000.000.001变为100…1
"089.108.003.152".replaceAll("\\b0+\\B", "")