Java 如何在Apache Commons字符集中包含插入符号字符^?
ApacheCommons字符集类有自己的属性。在该语法中,插入符号(^)具有特殊含义(否定),但没有任何文档说明如何在不否定后面的字符的情况下将插入符号包含在集合中。 例如,以下内容意外返回false:Java 如何在Apache Commons字符集中包含插入符号字符^?,java,apache-commons,apache-commons-lang,Java,Apache Commons,Apache Commons Lang,ApacheCommons字符集类有自己的属性。在该语法中,插入符号(^)具有特殊含义(否定),但没有任何文档说明如何在不否定后面的字符的情况下将插入符号包含在集合中。 例如,以下内容意外返回false: CharSet.getInstance("!@#$%^&").contains('&'); 有趣的是,下面返回true,我认为这是一个bug(尽管JavaDoc没有指定它应该如何工作): 更新:有关此行为的解释,请参见下面@Duncan的评论) 我的问题是,如何将包含^的字符
CharSet.getInstance("!@#$%^&").contains('&');
有趣的是,下面返回true,我认为这是一个bug(尽管JavaDoc没有指定它应该如何工作):
更新:有关此行为的解释,请参见下面@Duncan的评论)
我的问题是,如何将包含
^
的字符集
指定为一个字符,而不影响该字符集中的其他字符?您可以使用插入符号作为最后一个字符
CharSet.getInstance("!@#$%&^").contains('&')
返回true。getInstance方法如下所示:
public static CharSet getInstance(String... setStrs)
根据法律规定,这样做是完全有效的(并且有记录在案):
CharSet.getInstance("^", "!@#$%&").contains('^')
有趣的是,下面返回true,我认为这是一个bug
(尽管JavaDoc没有指定其行为方式):
这个行为看起来很奇怪,直到你考虑你所提供的字符集意味着什么。您的集合包含集合[!@$%]
中的字符以及任何非字符&
的字符
因此,^
在集合中,因为它不是字符&
如果您感兴趣,
CharSet.getInstance(&^&')包含('&')
返回true
,因为匹配是在原始提供的字符范围上从左到右进行的。但是,这在文档中并不清楚。您是否尝试过前导的“\`”@sherb,尝试过它(实际上\\,因为Java字符串文本必须转义),但它不起作用CharSet
没有特别处理\问题。我仍然认为这方面的文档不足,所以我创建了一些文档来改进它。
CharSet.getInstance("^", "!@#$%&").contains('^')
CharSet.getInstance("!@#$%^&").contains('^')