2

Holub on Patternsを読んでいるときに、理解できないコードを見つけました。

コードは次のようになります。必要に応じて、ここで本の一部を読むことができます。

/** 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」と書かれていますが、メソッドは小文字でパターンを比較し、大文字と小文字を区別しない方法で認識していることを意味します

ここで何が欠けていますか?

編集

これをエラッタリストで検索しましたが(公式ではありません)、ありませんでした。そして、これを正誤表と見なすのは難しいです。これについては何度か言っています。

4

4 に答える 4

1

このコードは、大文字と小文字を区別せずに一致することを保証できます。

コメントや本が何を言っているかは気にしません。

于 2012-09-22T11:24:36.290 に答える
1

そして、これを正誤表と見なすのは難しいです。

それにもかかわらず、その本は間違っています。コードは明らかに大文字と小文字を区別しない方法でトークンに一致し、あなたの実験はこれを確認します。著者 (およびその編集者) でさえ間違いを犯します。

于 2012-09-22T11:41:28.513 に答える
0

どうやら検索is case-insensitive。私が推測できるのはcan be bugs everywhere、(および)javadocs and in booksを見るだけで構築されている だけです。javadocsnot at exact code

于 2012-09-22T09:19:26.980 に答える
0

マッチングを行うには、次の 2 つの方法があります。

  1. 文字を一度に 1 つずつ比較し、小文字が同じ文字 (大文字のみ) と同等に扱われるようにします。これらの文字レベルの一致がそれぞれ等しい場合、文字列全体が一致します。
  2. 最初に文字列とパターンの両方を小文字にしてから、完全な文字一致を実行します。

最初のケースでは、「この文字はその文字と同じですか」という質問では大文字と小文字が区別されないため、大文字と小文字が区別されません。テストでは大文字と小文字が区別されるため、2 つ目は大文字と小文字が区別される可能性がありますが、テスト外で両方の文字列を小文字に変更したため、この問題は意味がありません。

于 2012-09-22T11:13:25.993 に答える