2012-04-08 88 views
2

我正在嘗試使用方法useDelimiter("&|=|~|^");將java掃描程序與以下一組分隔符& = ~ ^(與號,等號,代字號,插入符號)一起使用。java掃描儀忽略^ Caret

除了^之外,所有的分隔符都可以正常工作,爲什麼會這樣呢?

我看不到掃描儀文檔中的原因。

+0

「squiggle」被稱爲「tilde」(〜)http://en.wikipedia.org/wiki/Tilde – 2012-04-08 21:49:03

+0

我以爲是這樣...只是沒有想到我可以拼寫正確拼寫雖然 – Hector 2012-04-10 03:47:35

回答

3

您需要轉義^,如下所示:useDelimiter("&|=|~|\\^")。這是因爲^是正則表達式中的元字符,並且String參數useDelimiter()最終被編譯爲正則表達式Pattern

同樣地,你可以寫這樣的分隔符,在這種情況下沒有必要逃避^useDelimiter("[&=~^]")

+0

我已經試過這個方法和它沒有工作......但是我認爲這是因爲^緊接着是=。我相信如果兩個分隔符相互跟隨,那麼使用單個分隔符的列表不起作用...或者也許兩個相鄰的分隔符最終在標記中變爲空值 – Hector 2012-04-10 03:50:28

+0

在字符類([''''在正則表達式中),如果在開始處找到'^'則表示否定。例如,這個'[^ abc]'表示:匹配任何東西_但是a或b或c。如果脫字符號出現在字符類中的任何其他位置,則將其解釋爲正常字符 – 2012-04-10 03:54:25

2

^是在正則表達式中的保留符號,所以你要逃避它:\\^

1

而不是使用交替的,你可以使用一個character class

"[&=~^]" 

由於^不是一個字符類(除了在開始時)內專用不需要逃跑。