2013-03-09 61 views
0

我不能找到一個妥善的解決這個問題:Java的掃描儀的CSV useDelimiter

我有有值的列表.csv文件逗號分開separeted的最後一個。 當我嘗試將這些值分配給變量時,第一行的最後一個值將理解第二行的第一個值。我嘗試過使用「,\ n *」,但它不起作用。

在此先感謝您的幫助。

代碼:

Scanner inputStream = new Scanner(file).useDelimiter(",\\n*"); 

CSV文件:

Thomson,Alfred,NY,00192838,USA

Vincent,Ramblè,PA,0033928283,FRANCE

我能得到什麼:

variable5 = USA Vincent

我希望得到什麼:

variable5 = USA

variable6 = Vincent

+0

一些文本編輯器在新行中使用\ n \ r – Sednus 2013-03-09 18:51:21

回答

1

只需使用BufferedReader逐行讀取文件,然後在主循環內使用StringTokenizer標記BufferedReader readLine方法佔用的一行。

0

請刪除*。下面的代碼似乎工作

String testpat = "abc,de\n\nasdfs,fffs,\nslsll\nss"; 
    Scanner scanner = new Scanner(testpat).useDelimiter(",\\n"); 

通知模式\ n \不是N *

+0

我以前試過,不幸的是它不起作用,我得到這個錯誤:_'Exception在線程「main」java.lang.OutOfMemoryError:Java heap空間'_。之後,我嘗試更改eclipse.ini文件和IDE菜單中提供的Heap大小的增加值,但仍然收到相同的錯誤。 – JackTheDog 2013-03-10 13:33:28

0

在你的模式,你要麼需要一個逗號或線組合的末端。這裏最好的事情將是一個非交替的非捕獲組。如果你不需要考慮CRLF組合,角色類可能會有效,但這並不總是一個好的假設。

下面是一個例子。我使用Clojure來驅動Java API,如果你花一分鐘時間看看它,即使你對Clojure不熟悉,你也應該能夠獲得主旨。分號後的位是註釋。

; define a function that will return a scanner on user input 
; with a given pattern 
user=> (defn scanner [input delimiter] 
      (-> (java.util.Scanner. input) (.useDelimiter delimiter))) 
#'user/scanner 

; define the input 
user=> (def input "Thomson,Alfred,NY,00192838,USA\nVincent,Ramblè,PA,0033928283,FRANCE") 
#'user/input 

; create the scanner 
;  (:?) is a non capturing group 
;  the | in the middle tells the group to look for a or b 
;  first alternative is a comma 
;  second alternative is a newline followed by 0 or 1 
;  carriage returns. 
;  The javadoc for the java.util.Pattern class really helps 
user=> (def myscanner (scanner input "(:?,|\n\r?)")) 
#'user/myscanner 

; quick/dirty way to call next on the scanner 10 times and print 
; the result of each call 
user=> (dotimes [n 10] (println (.next myscanner))) 
Thomson 
Alfred 
NY 
00192838 
USA 
Vincent 
Ramblè 
PA 
0033928283 
FRANCE 

如果你真的想做CSV,但是這個問題已經解決了很多次。那裏有很多庫可以處理一些CSV的糟糕部分。例如http://commons.apache.org/proper/commons-csv(這只是一個例子 - 你應該在使用前評估它)。

祝你好運!

+0

謝謝Bill!我設法通過添加|來解決問題。所以工作版本是'Scanner inputStream = new Scanner(file).useDelimiter(「,| \ n」);'謝謝大家的幫助! – JackTheDog 2013-03-10 14:08:24

+0

@JackTheDog很高興你找到它。這個網站的工作方式是,你接受那個對你來說最正確的答案,並且贊成其他好的答案。歡迎來到Stack Overflow,這是一個很棒的網站。很滿意幫助別人。 – Bill 2013-03-10 16:57:21