当我正在阅读Holub on Patterns时,我发现了无法理解的代码。
代码如下所示,如果您愿意,可以阅读here中的部分内容。
/** Matches a simple symbol that doesn't have to be on a "word"
* boundary; punctuation, for example. SimpleToken
* is very efficient, but does not recognize characters in
* a case-insensitive way, as does {@link WordToken} and
* {@link RegexToken}.
*
* @include /etc/license.txt
*/
public class SimpleToken implements Token
{
private final String pattern;
/** Create a token.
* @param pattern a string that defines a literal-match lexeme.
*/
public SimpleToken( String pattern )
{ this.pattern = pattern.toLowerCase();
}
public boolean match( String input, int offset )
{ return input.toLowerCase().startsWith( pattern, offset );
}
public String lexeme() { return pattern; }
public String toString(){ return pattern; }
}
评论(和书)说SimpleToken类“不以不区分大小写的方式识别字符”,但match
方法比较小写的模式,这意味着它 以不区分大小写的方式识别。
我在这里缺少什么?
修改
我在errata list搜索了这个(虽然不是官方的),但没有。并且很难将其视为勘误。它说了好几次。
答案 0 :(得分:1)
我可以向您保证,此代码不敏感地匹配案例。
。我不在乎评论或书中说的是什么。
答案 1 :(得分:1)
很难将此视为勘误。
尽管如此,这本书是不正确的。代码明显地以不区分大小写的方式匹配令牌,您的实验证实了这一点。即使是作者(及其编辑)也会犯错误。
答案 2 :(得分:0)
显然是搜索is case-insensitive
。我可以推测的是can be bugs everywhere
javadocs
中的and in books
,只有通过查看javadocs
(和not at exact code
)才能构建。
答案 3 :(得分:0)
有两种方法可以进行匹配:
第一种情况是不区分大小写的,因为“这个字符与该字符相同”问题忽略了字母的情况。第二个可能区分大小写,因为测试确实考虑了大小写,尽管这个问题没有实际意义,因为您在测试之外将两个字符串都更改为小写。