0

我有一个包含一行的 csv 文件;

'2013-05-25 23:59:59','-126125372','299134596','-1272989684','1826558680','-441013765','-441013765'

每次令牌遇到空格(例如“2013-05-25 23:59:59”)时都会引发错误。我正在使用 StringTokenizer

知道这是怎么发生的吗?

顺便说一句,这是我的代码;

        Scanner x = new Scanner(new FileReader("c:\\test.csv"));
        StringTokenizer token = new StringTokenizer(x.next());           

        while (token.hasMoreElements())
        {
            System.out.println(token.nextElement()); 

        }
4

3 回答 3

0

我假设 x 是一个迭代器。其next()方法会引发该异常。如果您坚持使用 StringTokenizer 遗留类,请检查是否有更多元素使用x.hasNext()方法。

于 2013-05-23T02:19:33.623 回答
0

用这个

String str = "2013-05-25 23:59:59,'-126125372','299134596','-1272989684','1826558680','-441013765','-441013765'";
        StringTokenizer st = new StringTokenizer(str);

        System.out.println("---- Split by space ------");
        while (st.hasMoreElements()) {
            System.out.println(st.nextElement());
        }

您在 59 之后有无效字符(“)2013-05-25 23:59:59”,' 更改或跳过它

于 2013-05-23T02:20:39.337 回答
0

假设您的 CSV 包含以下行:

'2013-05-25 23:59:59','-126125372','299134596','-1272989684','1826558680','-441013765','-441013765'

您刚刚发布的代码

    Scanner x = new Scanner(new FileReader("c:\\test.csv"));
    StringTokenizer token = new StringTokenizer(x.next());           

只会捕获'2013-05-25为带有 的字符串x.next(),请参阅 javadoc 的Scanner#next(). 从javadoc,

Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。

所以next()会将所有内容作为字符串返回到下一个空格。改为使用nextLine(),以返回整行。

StringTokenizer token = new StringTokenizer(x.nextLine());  
于 2013-05-23T02:53:17.177 回答