2017-04-23 40 views
-2

我希望使用Scanner類的方法:.useDilimiter()解析一個文件,以前我會用一系列.replaceAll()語句來替換我想要的dilimiter與white spaceJava - 如何使用.useDelimiter()將稀釋劑設置爲多個不同的東西?

無論如何,我試圖讓Scanner的dilimiter的以下任一字符:.(){}[],!standard white space。我會如何去做這件事?

+1

的可能的複製[爪哇 - 在一臺掃描儀使用多個分隔符(http://stackoverflow.com/questions/6244670/java-using-multiple-delimiters -in-a-scanner) –

回答

0

掃描儀使用正則表達式(正則表達式)來描述分隔符。默認情況下,它是\p{javaWhitespace}+,它表示一個或多個(由於+運算符)空格。

正則表示單個從字符集中的字符我們可以使用character class [...]。但由於在正則表達式中的[]表示字符類的開始和結束,所以這些字符是元字符(甚至在字符類內)。要把它們當作文字,我們首先需要擺脫它們。我們可以通過

  • 加入\(在寫作"\\"串)之前,
  • ,或者將它們在\Q...\E表示報價部分(其中所有字符都被視爲文字,而不是元字符),做到這一點。

因此,代表() { } [ ] , !字符之一的正則表達式可能看起來像"[\\Q(){}[],!\\E]"

如果你想添加支持標準的分隔符,你可以使用\p{javaWhitespace}+ OR操作符是|此正則表達式相結合。

所以,你的代碼可以是這樣的:

yourScanner.useDelimiter("[\\Q(){}[],!\\E]|\\p{javaWhitespace}+"); 
+0

謝謝!非常有幫助,因爲我仍然很困惑正則表達式 – Quabs

+0

@Quabs歡迎您。既然你是新來的,你可能不知道如果某些答案解決了你的問題,你可以將其標記爲解決方案。 [「如何接受答案工作?」](http://meta.stackexchange.com/a/5235)。 – Pshemo

相關問題