2014-09-05 62 views
1

我有一個簡單的掃描儀,如下所示。使用掃描儀與自定義分隔符跳過尾隨空令牌

Scanner sc = new Scanner(new FileInputStream("...<CSV file>")); 
sc.useDelimiter(","); 

我注意到上面的掃描儀跳過了後面的空標記。

有沒有一種方法可以使用掃描儀獲得空尾標記?

String.split(pattern, -1)會如何包含空尾tokens

+0

你可以添加示例文件內容和預期嗎? – Tirath 2014-09-30 18:02:05

回答

1

可以用掃描儀得到最終的空令牌這超出了最後一個分隔符,但它需要一些特殊處理:

  1. 構造一個正則表達式匹配零寬度位於分隔符前面。您將需要使用零寬度正向超前構造(?=X)。這個字符串或模式將成爲您的參數Scanner :: useDelimiter。對於一行中有逗號分隔值的簡單情況,那將是useDelimiter("(?=,)")

  2. 在處理循環中,除了第一個標記之外,您需要從每個標記的前面去除實際分隔符。見下文。

  3. 如果第一個標記以分隔符開頭,則表示掃描程序在輸入開始處跳過一個空標記的特殊情況。聽起來有點熟?如果您在輸入開始時擔心空的代幣,您可能需要處理這種特殊情況。

最後,您可以將這三個修改組合成一個包裝類,它提供了與原始掃描儀類似的功能。