java正则表达式模式匹配

java正则表达式模式匹配,java,regex,Java,Regex,我没有什么线索 abcd:1234 abcd:1234 abcd:1234 abcd:1234 abcd 1234 xiao:xiao dgdfgdf xiao dgdsfsfsf 请使用java代码帮助将abcd替换为xyz,而不删除前四个字符串中的空格,保留第五个字符串不变,第六个字符串不变。由于要匹配的模式为abcd,因此仅将第一个abcd实例替换为1234:尝试以下操作: public void checkString(String s) { if(s.contains(":")

我没有什么线索

abcd:1234 abcd:1234 abcd:1234 abcd:1234 abcd 1234 xiao:xiao dgdfgdf xiao dgdsfsfsf 请使用java代码帮助将abcd替换为xyz,而不删除前四个字符串中的空格,保留第五个字符串不变,第六个字符串不变。由于要匹配的模式为abcd,因此仅将第一个abcd实例替换为1234:

尝试以下操作:

public void checkString(String s) {
    if(s.contains(":"))
        s.replaceFirst("abcd", "xyz");
}
public class Test {     
    public static void main(String[] args) {
        String[] saveSpace = {
            "abcd: 1234",
            "abcd : 1234",
            "abcd : abcd dgdfgdf abcd dgdsfsdf",
            "abcd 1234",
            "asdasdas abcd abcd: sdfdsf"
        };

        String regex = "abcd(?!\\s*\\w)(?=(?:[^:]*\\:){1}[^:]*$)";
        String replace = "xyz";

        for(int i = 0; i<saveSpace.length; i++) {
            saveSpace[i] = saveSpace[i].replaceFirst(regex, replace);
            System.out.println(saveSpace[i]);
        }
    }
}
然后调用checkString并插入每个字符串

checkString(string1)
checkString(string2)
...
String类中的replaceFirst函数将第一个字符串的第一次出现替换为第二个字符串。contains函数检查字符串是否包含字符串:在本例中,如果存在,则返回true。

尝试以下操作:

public void checkString(String s) {
    if(s.contains(":"))
        s.replaceFirst("abcd", "xyz");
}
public class Test {     
    public static void main(String[] args) {
        String[] saveSpace = {
            "abcd: 1234",
            "abcd : 1234",
            "abcd : abcd dgdfgdf abcd dgdsfsdf",
            "abcd 1234",
            "asdasdas abcd abcd: sdfdsf"
        };

        String regex = "abcd(?!\\s*\\w)(?=(?:[^:]*\\:){1}[^:]*$)";
        String replace = "xyz";

        for(int i = 0; i<saveSpace.length; i++) {
            saveSpace[i] = saveSpace[i].replaceFirst(regex, replace);
            System.out.println(saveSpace[i]);
        }
    }
}
它应该与abcd匹配,后跟任意数量的空格a;[a-zA-Z0-9]中没有字符

因此,这里是请求的快速答案,因为其他人似乎更喜欢讨论而不是代码

String input[] = {
    "abcd: 1234",
    "abcd : 1234",
    "abcd    : 1234",
    "abcd:       1234",
    "abcd 1234",
    "abcd : abcd dgdfgdf abcd dgdsfsdf",
    "abcd abcd: dgdfgdf abcd dgdsfsdf",
    "sdsdsdsad abcd abcd : dgdfgdf abcd dgdsfsdf"
};

for (String s: input) {
    String output = s.replaceFirst("^(.*)abcd((?=\\s*:).*)$", "$1xyz$2");
    System.out.println(output);
}   
这将为您提供:

xyz: 1234
xyz : 1234
xyz    : 1234
xyz:       1234
abcd 1234
xyz : abcd dgdfgdf abcd dgdsfsdf
abcd xyz: dgdfgdf abcd dgdsfsdf
sdsdsdsad abcd xyz : dgdfgdf abcd dgdsfsdf

希望这有助于结束讨论。

您的\u字符串不能是4个字符串。仅仅写一行代码并不是一个好建议,但Java规则不会经常更改,而且您的代码存在问题,如果您要测试它,这一点是显而易见的。所以,在你发布/更新你的答案之前,请确保它是正确的,这不是一场比赛。@Michealmarquick这么多恶霸,你怎么会有这种感觉?堆栈溢出的目的是成为清晰编程问题和答案的可搜索存储库。如果任何一个问题/答案的质量不高、不清楚或完全错误,那么它对其他人都没有用处,这意味着在当前形式下,它不属于这里,因此我们要求其作者进行更正/澄清。如果一个问题的质量较低,至少给一个机会编辑该问题,检查这里的人的答案。与其假设OP没有尝试,不如尝试实际的帮助?欺负那些试图帮助别人的人,bay说代码没有经过测试等等。。在没有机会纠正错误的情况下结束问题。如果人们花足够的时间检查API、书籍、尝试代码等等,我非常确信,不必在这里发布,就可以找到解决大多数问题的方法。有时,人们可能急于得到快速的答案,或者尝试正确的方向,他们会在这里发布一个问题。一个问题对你来说可能很简单,但请不要假设它对每个人都很简单。如果字符串为asdasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDasDa。。在这种情况下,我应该只替换第二个abcd实例,并记住应该忽略abcd和之间的空格:我明白你的意思了now@michealmarquiz如果没有,请告诉我t@Dan不要像checkString方法中那样分配参数。这通常是一个好主意。非常感谢。。但是曾经的小问题。。abcd可以在任何地方,而不仅仅是第一个实例。。示例:dGDGDF dGDGDF dGDSFDF、SDSDSAD dGD dGDF dGDGDF dGDFSDF仅dGDSFDF应在这些示例中替换:或examples@michealmarquiz我已相应地编辑了答案。我猜对了吗?abcd:每行最多出现一次?