java。替换所有以:with space结尾的单词

时间:2015-05-21 01:26:53

标签: 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 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个子字符串?

2 个答案:

答案 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]