我有几个字符串
"abcd: 1234"
"abcd : 1234"
"abcd : 1234"
"abcd: 1234"
"abcd 1234"
"abcd : abcd dgdfgdf abcd dgdsfsdf"
请帮助java代码用xyz替换abcd而不删除前4个字符串中的空格并保留第5个字符串,而第6个只用abcd的第一个实例替换为1234,因为要匹配的模式是abcd :
答案 0 :(得分:0)
试试这个:
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]);
}
}
}
输出:
xyz: 1234
xyz : 1234
xyz : abcd dgdfgdf abcd dgdsfsdf
abcd 1234
asdasdas abcd xyz: sdfdsf
它应匹配abcd
后跟任意数量的空格,;
且[a-zA-Z0-9]
答案 1 :(得分:0)
所以这是请求的快速回答,因为其他人似乎更喜欢讨论代码......
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
希望这有助于(并结束讨论)。
答案 2 :(得分:-1)
试试这个:
public void checkString(String s) {
if(s.contains(":"))
s.replaceFirst("abcd", "xyz");
}
然后调用checkString并插入每个字符串。
checkString(string1)
checkString(string2)
...
String类中的replaceFirst
函数将第一个字符串的第一个出现替换为第二个字符串。 contains
函数检查字符串是否包含字符串&#34;:&#34; (在这种情况下)并返回true(如果存在)。