我有一个字符串,就像
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]
我如何确保它不会替换所有内容并且一次执行1个子字符串?
答案 0 :(得分:2)
一次只做一个子字符串。你告诉它匹配“任意数量的字符,然后是:
”;它匹配[myadat: 56, myLabel2: r5, myll: rtet , erewrw:
(这是一堆字符,然后是:
)。
如果您希望它仅匹配不是空格的字符,请使用[^ ]*:
。
答案 1 :(得分:1)
我认为你想要一些匹配连续非空格的东西然后是:
然后像
Pattern pattern = Pattern.compile("\\S+:\\s+");
然后我注意到输入中rtet
之后似乎有一个额外的空格
String str = "[myadat: 56, myLabel2: r5, myll: rtet, erewrw: 56]";
我们需要预先添加"["
,因为第一个冒号位于第一个冒号之前,并替换为空String
Matcher m = pattern.matcher(str);
String str2 = "[" + m.replaceAll("");
System.out.println(str2);
我得到了(请求)
[56, r5, rtet, 56]