我想解析csv如下:
上午12:50,11.0,10.0,94,1013,10.0,NNW,14.8, - ,N / A ,,主要是 多云,330,2011-10-27 23:50:00
解析它我使用如下代码:
while((mylines = rdr.readLine()) != null)
{
Pattern p = Pattern.compile("<br />");
mylines=mylines.replaceAll("<br />", "");
System.out.println(mylines);
StringTokenizer st = new StringTokenizer(mylines , ",");
while(st.hasMoreTokens())
{
System.out.println(st.nextToken());
}
}
对于我称之为Null的第10个元素我没有得到任何不好的令牌响应。 我怎样才能获得所有元素的标记?
问候
答案 0 :(得分:3)
这是StringTokenizer
类的预期行为。
您可以通过在拆分字符串之前添加以下行来强制程序返回一些内容"***"
,例如空标记:
mylines=mylines.replaceAll(",,", ",***,");
在这种情况下,StringTokenizer
将返回***
而不是null
答案 1 :(得分:1)
如果您习惯使用第三方库,请使用Apache的commons-lang并尝试StringUtils.splitPreserveAllTokens()
- 请参阅the API doc。
答案 2 :(得分:0)
在第十个位置,您有,,
,这是一个空字符串,在Java中由空值表示。为避免打印空值,请执行类似
String str;
if((str = st.nextToken())!=null) {
System.out.println(str);
} else {
//print nothing or maybe a newline
}
答案 3 :(得分:0)
嗨,这是一个简单的测试用例,它解析该行并为您提供所有元素,包括空元素:
package com.sg2net.test;
public class TestSplit {
/**
* @param args
*/
public static void main(String[] args) {
String[] data="12:50 AM,11.0,10.0,94,1013,10.0,NNW,14.8,-,N/A,,Mostly Cloudy,330,2011-10-27 23:50:00§".split(",");
//String[] data="valore##valore1".split("##");
System.out.println(data.length);
if (data.length>0) {
int i=1;
for (String element : data) {
if (element==null || element.length()==0) {
System.out.println("empty element at position " + i);
}
System.out.println(element);
i++;
}
}
}
}
答案 4 :(得分:0)
而不是null,查找长度为&gt;的标记。 0.在Java中,值null与空字符串不同。
答案 5 :(得分:0)
ostermiller.org有一个jar,有很好的实用工具类,如CSV-Parser/Writer等。