如何在Apache Commons CharSet中包含插入字符^?

时间:2014-11-21 21:18:28

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

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

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

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

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

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

我的问题是,如何指定包含CharSet作为字符的^而不影响该集中的其他字符?

3 个答案:

答案 0 :(得分:3)

getInstance方法如下所示:

 public static CharSet getInstance(String... setStrs) 

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

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

答案 1 :(得分:2)

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

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

返回true。

答案 2 :(得分:1)

  

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

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

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

因此,^位于集合中,因为它不是字符&

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