useDelimiter("&|=|~|^");
メソッドを使用して、次の区切り文字のセット(アンパサンド、等価、チルド、キャレット)でJavaスキャナを使用しようとしています。Javaスキャナが^キャレットを無視します
すべての区切り文字は、無視される^
以外は正常に機能します。なぜですか?
なぜスキャナのドキュメントに表示されないのですか。
useDelimiter("&|=|~|^");
メソッドを使用して、次の区切り文字のセット(アンパサンド、等価、チルド、キャレット)でJavaスキャナを使用しようとしています。Javaスキャナが^キャレットを無視します
すべての区切り文字は、無視される^
以外は正常に機能します。なぜですか?
なぜスキャナのドキュメントに表示されないのですか。
^
のように、useDelimiter("&|=|~|\\^")
をエスケープする必要があります。これは、^
が正規表現のメタキャラクタであり、String
のパラメータがuseDelimiter()
であることが、正規表現Pattern
にコンパイルされるためです。
同等に、あなたはこのような区切り文字を書くことができ、この場合には^
をエスケープする必要はありません:useDelimiter("[&=~^]")
私はすでにこれを試していたしかし、私はこれが^の直後にあったためだと思う。私は2つの区切り文字がお互いに続いて、1つの区切り文字のリストを使って作業していないと考えています...あるいは、2つの区切り文字が隣にある場合、トークンにヌルが入ります。 – Hector
文字クラス( '[]正規表現で)、 '^'は最初に見つかった場合は否定を意味します。例えば、この '[^ abc]'は以下を意味します:何でも_but_aまたはbまたはcにマッチします。キャレットが文字クラスの他の位置に表示されている場合は、通常の文字として解釈されます –
^
は、あなたがそれをエスケープする必要があるので、正規表現の予約シンボルです:\\^
。代わりにあなたがcharacter classを使用することができ交代を使用しての
:
"[&=~^]"
^
以降は(開始時を除く)文字クラス内それがエスケープは必要ありません特別なものではありません。
"squiggle"は "チルド"(〜)http://en.wikipedia.org/wiki/Tilde –
私はそう思った...ちょうどチルドを正しく綴ることができたと思った。 – Hector