Java 从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

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("(?<=^|\\.)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", "")