.nextToken()遇到一个抛出java.util.NoSuchElementException的空间

时间:2013-05-23 02:12:08

标签: java stringtokenizer

我有一个包含一行的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()); 

        }

3 个答案:

答案 0 :(得分:0)

我假设x是迭代器。其next()方法抛出该异常。 如果您坚持使用StringTokenizer遗留类,那么使用x.hasNext()方法检查实际上是否有更多元素。

答案 1 :(得分: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());
        }

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

答案 2 :(得分: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()的字符串,请参阅Scanner#next()的javadoc。来自javadoc,

  

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

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

StringTokenizer token = new StringTokenizer(x.nextLine());