从字符串中删除逗号和一些字符

我有一个可以采用以下任何格式的字符串:

'xyz','abc'         //after conversion --> 'abc'
'abc','xyz'         //after conversion --> 'abc'  
'xyz'               //after conversion --> 
'abc','xyz','abc'   //after conversion --> 'abc','abc'

在此,我必须删除'xyz',如果它有任何前导或尾随逗号。 请提出如何使用正则表达式实现这一目标。

谢谢

a13555596279 回答:从字符串中删除逗号和一些字符

您可以链接一些String::replace方法

String str = "'abc','xyz','abc'";
str = str.replace (",'xyz'","").replace("'xyz',","").replace("'xyz'","");

输出

'abc','abc'

,

仅Regex不能很好地完成此任务。但是,您可以执行以下操作:

  1. 用逗号分隔字符串。实际上,例如,如果收到的字符串是"'abc','xyz'",则可以用逗号分隔,并用任意数量的空格包围。您可以为此使用正则表达式\s*,\s*
  2. 删除所有与您不需要的字符串匹配的内容-您可以使用基本的字符串匹配或正则表达式来处理更复杂的模式。
  3. 再次将分割后的字符串转换为逗号分隔的列表。

Usign Java 8 Stream操作,可以很简短:

String[] split = str.split(("\\s*,\\s*")); //1. split into separate strings
String result = Arrays.stream(split) //turn to stream
        .filter(chunk -> !"'xyz'".equals(chunk)) //2. remove anything you don't want
        .collect(Collectors.joining(",")); //3. convert back to comma separated list

.filter谓词可以更改为适合您的谓词-如果您只想匹配"'abc'",则可以使用chunk -> "abc'".equals(chunk)或使用.contains或{{ 1}},甚至是正则表达式。


可能有必要将过滤器规则提取到单独的谓词中,因此您可以在需要时更轻松地进行更改

equalsIgnoreCase

尽管如果我们检查此Predicate<String> filterRule = chunk -> !"'xyz'".equals(chunk); /* ... */ .filter(filterRule) /* ... */ 本身已经是一个谓词,并且谓词可以被否定,那么您不需要为此编写整个lambda,而只需将这些方法用作功能接口即可:

"'xyz'".equals

所有这些都可以内联,但是有点丑陋,因为您必须将其转换为适当的谓词以使其否定

Predicate<String> stuffWeDontWant = "'xyz'"::equals;
Predicate<String> filterRule = stuffWeDontWant.negate();

最后一件事看起来像这样:

Predicate<String> filterRule = ((Predicate<String>) "'xyz'"::equals).negate();

因此,现在您可以更轻松地更改任何过滤规则。您甚至可以通过传递不同的谓词作为过滤器,甚至将其用于任何类型的列表。


使用非Java 8或非Stream的方法执行以下操作:

Predicate<String> filterRule = ((Predicate<String>) "'xyz'"::equals).negate();

String result = Arrays.stream(str.split(("\\s*,\\s*")))
    .filter(filterRule)
    .collect(Collectors.joining(","));

此方法仍然可以与通过使用String[] split = str.split(("\\s*,\\s*")); //1. split into separate strings List<String> list = new ArrayList<>(Arrays.asList(split));//convert into an ArrayList to allow removing list.removeAll(Collections.singleton("'xyz'"));//2. remove anything you don't want String result = String.join(",list); //3. convert back to comma separated list 的谓词一起使用,但是这次必须与您不想要的完全匹配:

.removeIf()
本文链接:https://www.f2er.com/3154565.html

大家都在问