2

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

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

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

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

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

我的问题是,如何在不影响集合中其他字符的情况下指定一个CharSet包含字符的字符?^

4

3 回答 3

3

getInstance 方法如下所示:

 public static CharSet getInstance(String... setStrs) 

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

CharSet.getInstance("^", "!@#$%&").contains('^')
于 2014-11-21T21:29:22.810 回答
2

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

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

返回真。

于 2014-11-21T21:25:51.320 回答
1

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

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

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

因此,^is 在集合中,因为它不是 character &

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

于 2014-11-25T13:25:25.663 回答