2013-03-05 68 views
1

我一直試圖找到一種方法,從一個常量字符串分隔符分隔的文件中讀取一些數據。嘗試使用常量字符串分隔符從掃描儀讀取 - java.util.Scanner中

分隔符包括元字符,而我試圖分裂只在它的出現,讓正則表達式是不適合的。

有人可以爲我建議一種方式,我知道如何實現我自己的方法來做到這一點,我問的是是否有內置的Java來做到這一點。

舉例:!

約翰%#@〜23S,243母鹿%#@〜23S,243%去@#〜23S,243到菜市場買一些牛奶!

會導致

電話1:.next() - >約翰 召喚2:.next() - > DOE 通話3:.next() - >去 召喚4:.next() - >到市場上買一些牛奶。

回答

1

定界符包括元字符,我試圖分裂它只出現,所以正則表達式不適合。

你仍然可以使用正則表達式的分隔符 - 只需使用Pattern.quote使正則表達式確保「特」字不干擾。

這是假設你仍然要使用Scanner,當然。您可以使用Guava中的Splitter

+0

只會使用pattern.quote導致%#@!〜23s,243被拆分?或者是否會將其他分類相同的字符拆分?這就是爲什麼我認爲正則表達式不能使用,因爲我的理解是,它不檢查其中的人物出現的順序。 – 2013-03-05 18:23:44

+0

@JackSmith:不,這是一個模式 - 不只是一組字符。圖案*可以*是一組字符,但它不是一般。 – 2013-03-05 18:36:22

+0

感謝它的工作。雖然我不得不逃脫一些人物。 – 2013-03-06 02:45:55

0

嗯,我不確定您遇到問題的位置。這應該工作:

代碼:

String input = "John %#@!~23s,243 doe %#@!~23s,243 went %#@!~23s,243 to market to buy some milk."; 
    Scanner scanner = new Scanner(input).useDelimiter("\\s+" + Pattern.quote("%#@!~23s,243") + "\\s+"); 
    while (scanner.hasNext()) { 
     System.out.println("Token: ." + scanner.next() + "."); 
    } 

輸出:

Token: .John. 
Token: .doe. 
Token: .went. 
Token: .to market to buy some milk.. 

Pattern.quote()並非絕對必要對於例如字符串(不包含元字符),但可能是需要根據實際輸入。