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
我检查了以下帖子,但找不到任何解决方案:
您可以在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)
如果你想使用正则表达式,你可以使用(记得正确转义为java字符串文字)
,\b11\b|\b11\b,
Run Code Online (Sandbox Code Playgroud)
这将确保11由于单词边界而不会与另一个数字的一部分匹配,并且只匹配并删除一个逗号(如果存在两个).
你可以建立一个正则表达式
^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演示