我需要从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;
,int
,float
,String
。我怎么知道这种类型是什么?
我确实为它写了一些代码,但我的问题是浮点数。在我的计算机中,java说“7.9”不是浮点数,而是“7,9”。
但在某些电脑上“7.9”是一个浮动。我该如何解决这个问题?
char
答案 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