扫描仪类中使用分隔符的问题

时间:2011-05-25 18:59:45

标签: java file java.util.scanner

    try {
    Scanner in = new Scanner(new File("text.txt"));

    Formatter out = new Formatter("text1.txt");
    in.useDelimiter(",");
    int num = in.nextInt();//this line throws null exception
    for(int i = 0; i < num && in.hasNext(); i++)
    {

        out.format("%s","#string \n" + i );

        out.format("%s", in.next());


    }
    out.close();
    }
     catch (Exception e) {
         System.out.print(e.getMessage());
    }

输入是:

    4
hello,my,name,is

4是单词数。 输出必须是:

hello my name is

但是它出现了null错误。 什么是问题?

2 个答案:

答案 0 :(得分:3)

您必须在useDelimiter方法中使用正确的正则表达式。以下代码应该有效:

try {
    Scanner in = new Scanner(new File("text.txt"));
    Formatter out = new Formatter("text1.txt");
    in.useDelimiter(",|\n|\r\n|\\s+");
    int num = in.nextInt();
    for(int i = 0; i < num && in.hasNext(); i++)
        out.format("string # %d is: [%s]\n", i, in.next() );
    out.close();
}
catch (Exception e) {
    System.err.print("Exception: " + e);
}

输出

对于给定的输入

4
hello,my,name,is

输出:

string # 0 is: [hello]
string # 1 is: [my]
string # 2 is: [name]
string # 3 is: [is]

答案 1 :(得分:0)

问题在于,当您指定分隔符是逗号时,换行符不再是分隔符。

将您的文件更改为4,hello,my,name,is,它应该可以正常工作。