Java阅读csv和理解类型

时间:2017-03-24 17:40:52

标签: java floating-point

我需要从csv文件中读取。该文件包含一些不同的类型,例如select cnt, count(*), min(Contractor_Key), max(Contractor_Key) from (select Contractor_Key, count(*) as cnt from t group by Contractor_Key ) c group by cnt order by cnt; intfloatString。我怎么知道这种类型是什么?

我确实为它写了一些代码,但我的问题是浮点数。在我的计算机中,java说“7.9”不是浮点数,而是“7,9”。

但在某些电脑上“7.9”是一个浮动。我该如何解决这个问题?

char

2 个答案:

答案 0 :(得分:0)

我读的越多,我就意识到我错了。

如果您的CSV数据类似

1,2,3,4

然后它可以是(1,2和3,4)例如(1.2,3.4)或它可以是整数1到4

如果适当引用 “1,2”, “3,4”

然后你的解析器不会工作,因为它不使用引号作为分隔符。

因此很难说出看到数据导致问题的原因。 您可以在扫描仪中添加引号,但如果您的引用本身包含引号,则会有更多案例被解决

理想情况下使用适当的CSV解析,例如http://opencsv.sourceforge.net/

否则你需要浏览你的数据,并确保你的解析涵盖了你今天所拥有的所有案例,明天可能会有。

黑客解决方法是使用replaceAll(“。”,“,”)修改字符串;但是当再次这样做时,有很多坑,你的扫描仪可能会将这些元素混淆为CSV中的新条目。

具体来说,从代表小数位数从1,2变为1.2,您可以修改所需数字类型的本地

scanner1.useLocale(Locale.US);

据我所知,扫描仪无法使用多个语言环境。一种方法是使用两个扫描程序,同时使用两个不同的Locales以不同方式解析浮动。

答案 1 :(得分:0)

您可以使用#useLocale(java.util.Locale)

更改扫描仪的区域设置

将语言环境设置为使用.作为小数点的语言环境。即)

scanner.useDelimiter(",|\\n");   
scanner.useLocale( Locale.US );    // Use '.' as decimal point