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]