Java 我如何替换第二个“之间的所有内容?”&引用;和“;:”;在爪哇?

Java 我如何替换第二个“之间的所有内容?”&引用;和“;:”;在爪哇?,java,regex,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正则表达式引用了第二个点(\d+。\d.),但我不确定如何进行修剪 编辑: 我尝试了以下java正则表达式.replaceAll(“\\.(.*?”,“:”)但它似乎删除了第一个点

一直在网上研究,但还没有找到解决方案

我在Java中获得了以下字符串“555.8.0.i5:790.2.0.i19:904.1.0:8233.2:”

什么是最好的方法,我可以删除一切,包括第二个点的结肠? 我希望字符串以如下方式结束:
555.8:790.2:904.1:8233.2:

我在另一篇帖子上看到有人用java正则表达式引用了第二个点(\d+。\d.),但我不确定如何进行修剪

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

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

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

详细信息

  • (\\.[^:.]+)
    -捕获组1捕获点和1+字符,而不是文字点和冒号
  • \\.
    -文字点
  • [^::::+
    -1+个字符,冒号除外

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

您必须使用正则表达式吗?下面是一个使用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:

显示您的尝试。使用String.indexOf和String.substring。或者使用迭代+复制方法和简单的状态引擎来决定跳过什么。“这并不难。”沃尔夫很快就发帖了。