【问题标题】:How can I include the caret character ^ in an Apache Commons CharSet?如何在 Apache Commons CharSet 中包含插入符号 ^?
【发布时间】:2014-11-25 22:10:50
【问题描述】:

Apache Commons CharSet 类有自己的syntax for characters to be included in the set。在该语法中,插入符号 (^) 具有特殊含义(否定),但没有任何文档说明如何在集合本身中包含插入符号而不否定其后面的字符。 例如,以下意外返回 false:

CharSet.getInstance("!@#$%^&").contains('&');

有趣的是,以下返回 true,我认为这是一个错误(尽管 JavaDoc 没有指定它应该如何表现):

CharSet.getInstance("!@#$%^&").contains('^')

更新:请参阅下面@Duncan 的评论以了解此行为)

我的问题是,我怎样才能指定一个包含^CharSet 作为字符而不影响集合中的其他字符?

【问题讨论】:

  • 你试过前导`\`吗?
  • @sherb,试过了(实际上是 \\ 因为 Java 字符串文字必须转义),但它不起作用。 CharSet 没有特别对待 \。

标签: java apache-commons apache-commons-lang


【解决方案1】:

getInstance 方法如下所示:

 public static CharSet getInstance(String... setStrs) 

根据javadoc,这样做是完全有效的(并且有记录):

CharSet.getInstance("^", "!@#$%&").contains('^')

【讨论】:

【解决方案2】:

您可以使用插入符号作为最后一个字符

CharSet.getInstance("!@#$%&^").contains('&')

返回真。

【讨论】:

    【解决方案3】:

    有趣的是,以下返回true,我认为这是一个错误 (尽管 JavaDoc 没有指定它的行为方式):

    CharSet.getInstance("!@#$%^&").contains('^')
    

    在您考虑提供的字符集的含义之前,这种行为似乎很奇怪。您的集合包含来自集合[!@#$%] 的字符以及任何不是字符& 的字符。

    因此,^ 在集合中,因为它不是角色 &

    如果您感兴趣,CharSet.getInstance("&^&").contains('&') 返回true,因为匹配是在原始提供的字符范围上从左到右完成的。然而,这在文档中并不清楚。

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多