我的csv正在读入System.out,但是我注意到任何带空格的文本都移到下一行(作为返回\ n)
这是我的csv的启动方式:
first,last,email,address 1, address 2 john,smith,blah@blah.com,123 St. Street, Jane,Smith,blech@blech.com,4455 Roger Cir,apt 2
运行我的应用程序后,任何带有空格(地址1)的单元格都将扔到下一行。
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class main { public static void main(String[] args) { // -define .csv file in app String fileNameDefined = "uploadedcsv/employees.csv"; // -File class needed to turn stringName to actual file File file = new File(fileNameDefined); try{ // -read from filePooped with Scanner class Scanner inputStream = new Scanner(file); // hashNext() loops line-by-line while(inputStream.hasNext()){ //read single line, put in string String data = inputStream.next(); System.out.println(data + "***"); } // after loop, close scanner inputStream.close(); }catch (FileNotFoundException e){ e.printStackTrace(); } } }
因此,这是控制台中的结果:
first,last,email,address 1,address 2 john,smith,blah@blah.com,123 St. Street, Jane,Smith,blech@blech.com,4455 Roger Cir,apt 2
我使用扫描仪的方式有误吗?
scanner.useDelimiter(",");
这应该工作。
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class TestScanner { public static void main(String[] args) throws FileNotFoundException { Scanner scanner = new Scanner(new File("/Users/pankaj/abc.csv")); scanner.useDelimiter(","); while(scanner.hasNext()){ System.out.print(scanner.next()+"|"); } scanner.close(); } }
对于CSV文件:
a,b,c d,e 1,2,3 4,5 X,Y,Z A,B
输出为:
a|b|c d|e 1|2|3 4|5 X|Y|Z A|B|
请停止编写错误的CSV解析器!
我见过数百个CSV解析器,因此在线上也有所谓的教程。
几乎每个人都弄错了!
这不会是一件坏事,因为它没有影响到我,但人们谁尝试写CSV 读者,并把它错倾向于写CSV 作家了。并弄错他们。这些我必须为其编写解析器。
请记住,CSV(顺序不是那么明显):
如果你认为这显然不是问题,请再考虑一下。我已经看到这些项目中的每一项都被错误地实施。即使在主要软件包中。(例如Office-Suite,CRM系统)