【问题标题】:Replace all occurrences of ";;" in a string in Java替换所有出现的“;;”在 Java 中的字符串中
【发布时间】:2017-03-23 10:27:32
【问题描述】:

我正在寻找一种单行技巧来执行以下操作:

我有这个字符串"Car;;;;Plane",想要这个结果"Car;NULL;NULL;NULL;Plane"

我正在做myString.replaceAll(";;", ";NULL;");,但结果是"Car;NULL;;NULL;Plane",我猜它只找到了两次出现的模式,我希望它认为是三次出现。

最好/最快的方法是什么?

【问题讨论】:

  • 参考链接的问题,它也提供了更通用的方法。 .replaceAll(";(?!$)", "$0NULL").
  • 它包含例如"Plane;;Fruit;;;;Car",结果应该是"Plane;NULL;Fruit;NULL;NULL;NULL;Car"。但谢谢你,接受的答案应该很好。我编辑了问题”

标签: java regex replace


【解决方案1】:

您可以将以下代码与积极的“环顾四周”一起使用:

System.out.println(
    ";;;;"
    .replaceAll("(?<=;)(?=;)", "NULL")
);

输出

;NULL;NULL;NULL;

备注

  • 文档here
  • 基本上,这里的模式由两个非捕获组组成,它们同时查看捕获点的前后。如果两个条件都满足(“前面是;”和“后面是;”),则会在两者之间插入替换参数("NULL")。

【讨论】:

  • 正则表达式总是让我感到惊讶和困惑。
  • @BrandonIbbotson 这似乎是他们的主要目的 :)
【解决方案2】:

这是另一个较短的变体:

String repl = ";;;;".replaceAll("(?<!^);", "NULL$0");
//> ;NULL;NULL;NULL;

RegEx Demo

  • (?&lt;!^); 使用否定的后向匹配匹配除第一个之外的每个 ;
  • $0 是完全匹配字符串的反向引用。

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2011-02-23
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多