Java Scanner在读取文件时不起作用

时间:2017-01-16 01:53:38

标签: java java.util.scanner

public class Test {

    static private Scanner x;

    public static void main(String args[])
    {
        try {
            x=new Scanner(new File("C:\\Users\\scoda\\workspace\\Nikhil\\src\\chinese.txt"));
            x.useDelimiter(" ");
            while(x.hasNext())  
            {

                String a=x.next();
                String b=x.next();              
                String c=x.next();
                System.out.println(a+b+c);

            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

我的输入文件是

12 karthik kk
23 gg gg

预期产出:

12karthikkk
23gggg

实际输出:

12karthikkk
23
java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)

我试图长时间调试这个问题。 感谢帮助。

2 个答案:

答案 0 :(得分:4)

因为您将分隔符更改为空格,所以换行符不计为分隔符,并且字符串中实际上只有5个标记:

  1. 12
  2. KARTHIK
  3. KK

    23

  4. GG
  5. GG
  6. 您的代码在第二次调用String c=x.next();时抛出异常,因为没有第六个令牌。如果您删除x.useDelimiter(" ");语句,它将使用default whitespace delimiter,它也会在您的换行符上拆分,从而产生6个令牌。

答案 1 :(得分:0)

  

试试这个

  StringBuffer buffer = new StringBuffer(10);
        try
        {
            x = new Scanner(new File("D:\\test1.txt"));
            x.useDelimiter(" ");

            while (x.hasNext())
            {

                String a = x.next();
                buffer.append(a);

            }
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(buffer.toString());
    }