JAVA将所有以:结尾的单词替换为空格

JAVA将所有以:结尾的单词替换为空格,java,Java,我有一根绳子,它会像 String str = "[myadat: 56, myLabel2: r5 , myll: rtet , erewrw: 56]"; 我想用空格代替所有以“:”结尾的单词。我下面的程序给了我错误的数据 import java.util.*; import java.lang.*; import java.io.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /* Name of

我有一根绳子,它会像

String str = "[myadat: 56, myLabel2: r5 , myll: rtet , erewrw: 56]";
我想用空格代替所有以“:”结尾的单词。我下面的程序给了我错误的数据

import java.util.*;
import java.lang.*;
import java.io.*;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Pattern pattern = Pattern.compile(".*:");

        String str = "[myadat: 56, myLabel2: r5, myll: rtet , erewrw: 56]";

        Matcher m = pattern.matcher(str);

        String str2 = m.replaceAll(" ");


        System.out.println(str2);

    }
}
我得到的结果是[56]

我想得到[56,r5,rtet,56]

如何确保它不会替换所有内容并一次执行一个子字符串?

它一次执行一个子字符串。您告诉它匹配“任意数量的字符,然后是一个
”;它匹配了
[myadat:56,myLabel2:r5,myll:rtet,erewrw:
(这是一组字符,然后是


如果您希望它只匹配不是空格的字符,请使用
[^]*:

我想您需要匹配连续的非空格,然后是
,然后是类似空格的空格

Pattern pattern = Pattern.compile("\\S+:\\s+");
然后我注意到在您的输入中,
rtet
之后似乎有一个额外的空格

String str = "[myadat: 56, myLabel2: r5, myll: rtet, erewrw: 56]";
我们需要在前面加上
“[”
,因为第一个在第一个冒号之前,并替换为空的
字符串

Matcher m = pattern.matcher(str);
String str2 = "[" + m.replaceAll("");
System.out.println(str2);
我得到了(请求的)


单词是除空格以外的任何字符的序列吗?是的。单词是字符/数字,没有空格。为什么它先被删除[但不是最后一个]。另外,你能解释一下它的作用吗,以便我能更好地理解。@MAG因为第一个[是你告诉它要匹配的字符的一部分…它是一个字符之前的一个字符:
[56, r5, rtet, 56]