2012-04-08 10 views
2

useDelimiter("&|=|~|^");メソッドを使用して、次の区切り文字のセット(アンパサンド、等価、チルド、キャレット)でJavaスキャナを使用しようとしています。Javaスキャナが^キャレットを無視します

すべての区切り文字は、無視される^以外は正常に機能します。なぜですか?

なぜスキャナのドキュメントに表示されないのですか。

+0

"squiggle"は "チルド"(〜)http://en.wikipedia.org/wiki/Tilde –

+0

私はそう思った...ちょうどチルドを正しく綴ることができたと思った。 – Hector

答えて

3

^のように、useDelimiter("&|=|~|\\^")をエスケープする必要があります。これは、^が正規表現のメタキャラクタであり、StringのパラメータがuseDelimiter()であることが、正規表現Patternにコンパイルされるためです。

同等に、あなたはこのような区切り文字を書くことができ、この場合には^をエスケープする必要はありません:useDelimiter("[&=~^]")

+0

私はすでにこれを試していたしかし、私はこれが^の直後にあったためだと思う。私は2つの区切り文字がお互いに続いて、1つの区切り文字のリストを使って作業していないと考えています...あるいは、2つの区切り文字が隣にある場合、トークンにヌルが入ります。 – Hector

+0

文字クラス( '[]正規表現で)、 '^'は最初に見つかった場合は否定を意味します。例えば、この '[^ abc]'は以下を意味します:何でも_but_aまたはbまたはcにマッチします。キャレットが文字クラスの他の位置に表示されている場合は、通常の文字として解釈されます –

2

^は、あなたがそれをエスケープする必要があるので、正規表現の予約シンボルです:\\^。代わりにあなたがcharacter classを使用することができ交代を使用しての

1

"[&=~^]" 

^以降は(開始時を除く)文字クラス内それがエスケープは必要ありません特別なものではありません。

関連する問題