Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java扫描程序Csv使用分隔符_Java_Csv - Fatal编程技术网

Java扫描程序Csv使用分隔符

Java扫描程序Csv使用分隔符,java,csv,Java,Csv,我找不到解决这个问题的正确方法: 我有一个.csv文件,其中有一个值列表,最后一个值以逗号分隔。 当我尝试将这些值赋给变量时,第一行的最后一个值理解第二行的第一个值。我已尝试使用“,\n*”但无效 提前谢谢你的帮助 代码: Csv文件: 汤姆森,阿尔弗雷德,纽约,00192838,美国 文森特,兰布雷,宾夕法尼亚州,0033928283,法国 我得到的是: 变量5=美国 我想要的是: 变量5=美国 变量6=文森特 只需使用BufferedReader逐行读取您的文件,然后在主循环内使用Strin

我找不到解决这个问题的正确方法:

我有一个.csv文件,其中有一个值列表,最后一个值以逗号分隔。 当我尝试将这些值赋给变量时,第一行的最后一个值理解第二行的第一个值。我已尝试使用“,\n*”但无效

提前谢谢你的帮助

代码:

Csv文件:

汤姆森,阿尔弗雷德,纽约,00192838,美国

文森特,兰布雷,宾夕法尼亚州,0033928283,法国

我得到的是:

变量5=美国

我想要的是:

变量5=美国

变量6=文森特


只需使用BufferedReader逐行读取您的文件,然后在主循环内使用StringTokenizer标记BufferedReader readLine方法获取的单行。

请删除*。下面的代码似乎可以工作

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

请注意模式\n而不是\n*

在模式中,您需要逗号或行尾组合。这里最好是一个非捕获组和一个替代组。如果您不必考虑CRLF组合,角色类可能会起作用,但这并不总是一个好的假设

这里有一个例子。我使用Clojure来驱动JavaAPI,如果您花一分钟的时间看一下它,您应该能够获得要点,即使您不熟悉w/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的一些古怪部分。e、 (这只是一个例子,你应该在使用前对它进行评估)


祝你好运

一些文本编辑器对新行使用\n\r就地。我以前尝试过,但不幸的是,它不起作用,我收到了以下错误:“线程“main”中的异常java.lang.OutOfMemoryError:java堆空间”。此后,我试图通过eclipse.ini文件和IDE菜单更改堆大小,但仍然出现相同的错误。谢谢比尔!我只加了|就设法解决了这个问题。因此,工作验证是
Scanner inputStream=new Scanner(file).usedimiter(“,|\n”)谢谢大家的帮助@JackTheDog很高兴你找到了它。这个网站的运作方式是,你接受最适合你的答案,并且投票给其他好的答案。欢迎来到Stack Overflow,这是一个很棒的站点。帮助别人很令人满意。
; 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