【问题标题】:String contains any but one character字符串包含除一个字符以外的任何字符
【发布时间】:2019-07-20 13:20:01
【问题描述】:

我想检查一个字符串是否包含一个},它前面有任何字符,除了\。 据我所知,我可以使用. 作为aString.contains(...) 中的元字符来允许该位置的任何字符,但我不知道如何创建类似于黑名单的内容:aString.contains(“.(except ‘\‘)}“如果不创建自己的方法,这是否可能?

【问题讨论】:

  • 你试过什么?
  • 我试过aString.contains(“[^\]}“)
  • String.contains() 仅适用于纯文本,不适用于正则表达式

标签: java string contains metacharacters


【解决方案1】:

您需要正则表达式(从技术上讲,您不需要 正则表达式,但这是最好的方法):

if (aString.matches(".*(?<!\\\\)}.*"))

这个regex 说字符串应该如下组成

  • .* 零个或多个任意字符
  • (?&lt;!\\\\) 前一个字符不是反斜杠
  • } 右大括号
  • .* 零个或多个任意字符

这也适用于第一个字符的边缘情况是大括号。

live demo

【讨论】:

  • “这是最好的方式”对于最好的一种定义。最简洁的,是的。最易读......可能不是。
  • @Andy 虽然正则表达式很难阅读,但如果您熟悉它是可读的,并且它是基本(即非 AST 样式)“解析”的 goto 方法。当正则表达式很合适时(如这里),我会反对任何人在这类问题上抛出自己的代码,所以你可以继续做其他事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2016-01-26
相关资源
最近更新 更多