如何在第二个“。”之间更换所有内容。和java中的“:”?

时间:2016-11-01 17:04:30

标签: java regex

一直在线研究,但未能找到解决方案。

我在Java中有以下字符串'555.8.0.i5:790.2.0.i19:904.1.0:8233.2:'。

什么是最好的方法,我可以删除所有内容,包括第二个点到结肠? 我希望字符串最终看起来像这样:555.8:790.2:904.1:8233.2:

我在另一篇文章中看到有人用java regex引用了第二个点(\ d +。\ d。),但我不确定如何修剪。

编辑: 我尝试了以下java正则表达式.replaceAll("\\.(.*?):", ":");,但似乎从第一个点删除了所有内容。不知道如何从第二个点修剪它。

2 个答案:

答案 0 :(得分:0)

在您的情况下,您可以使用

.replaceAll("(\\.[^:.]+)\\.[^:]+", "$1")

请参阅regex demo

<强>详情:

  • (\\.[^:.]+) - 捕获第1组捕获点和除了字面点和冒号以外的1 +字符
  • \\. - 一个文字点
  • [^:]+ - 除结肠以外的1个字符。

在替换模式中,仅使用对组1中捕获的值的$1反向引用。

答案 1 :(得分:0)

你必须使用正则表达式吗?这是一个使用Java的解决方案:

public static void main(String[] args) {
    String myString = "555.8.0.i5:790.2.0.i19:904.1.0:8233.2:";
    StringBuilder sb = new StringBuilder();

    //Split the string into an array of strings at each colon
    String[] stringParts = myString.split(":");

    //Loop over each substring
    for (String stringPart : stringParts) {
        //Find the index of the second dot
        int secondDotIndex = stringPart.indexOf('.', 1 + stringPart.indexOf('.', 1));

        //If a second dot exists then remove everything after and including the dot
        if (secondDotIndex != -1) {
            stringPart = stringPart.substring(0, secondDotIndex);
        }

        //Append each string part and colon back to the final string
        sb.append(stringPart);
        sb.append(":");
    }

    System.out.println(sb.toString());
}

最终的println打印555.8:790.2:904.1:8233.2: