Java:String.replaceAll(regex,replacement);

Kru*_*nal 1 java regex string replace replaceall

我有一串逗号分隔的用户ID,我想从字符串中删除/删除特定的用户ID.

我遵循字符串和预期结果的可能性

int elimiateUserId = 11;

String css1 = "11,22,33,44,55";
String css2 = "22,33,11,44,55";
String css3 = "22,33,44,55,11";
// The expected result in all cases, after replacement, should be:
// "22,33,44,55"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

String result = css#.replaceAll("," + elimiateUserId, "");  // # =  1 or 2 or 3
result = css#.replaceAll(elimiateUserId + "," , "");
Run Code Online (Sandbox Code Playgroud)

这种逻辑在以下情况下失败了css3.请为我提出适当的解决方案.

注意:我正在使用Java 7

我检查了以下帖子,但找不到任何解决方案:

sf_*_*sf_ 7

您可以在Java 8中使用Stream API:

int elimiateUserId = 11;
String css1 = "11,22,33,44,55";

String css1Result = Stream.of(css1.split(","))
    .filter(value -> !String.valueOf(elimiateUserId).equals(value))
    .collect(Collectors.joining(","));

// css1Result = 22,33,44,55
Run Code Online (Sandbox Code Playgroud)


Seb*_*ske 5

如果你想使用正则表达式,你可以使用(记得正确转义为java字符串文字)

,\b11\b|\b11\b,
Run Code Online (Sandbox Code Playgroud)

这将确保11由于单词边界而不会与另一个数字的一​​部分匹配,并且只匹配并删除一个逗号(如果存在两个).


Wik*_*żew 5

你可以建立一个正则表达式

^11,|,11\b
Run Code Online (Sandbox Code Playgroud)

这将11,在string(^11,)或(|)的开头匹配,而,11不是跟随任何其他单词char(,11\b).

请参阅正则表达式演示.

int elimiate_user_id = 11;
String pattern = "^" + elimiate_user_id + ",|," + elimiate_user_id + "\\b";
System.out.println("11,22,33,44,55,111".replaceAll(pattern, "")); // => 22,33,44,55,111
System.out.println("22,33,11,44,55,111".replaceAll(pattern, "")); // => 22,33,44,55,111 
System.out.println("22,33,44,55,111,11".replaceAll(pattern, "")); // => 22,33,44,55,111
Run Code Online (Sandbox Code Playgroud)

请参阅Java演示