Java Scanner.next(),从while循环打印

时间:2013-07-31 16:19:40

标签: java java.util.scanner

我开始编写一个可以解析旧式.vmg文件*的小脚本。我想从扫描仪实用程序开始,所以我可以一个接一个地删除消息。这就是我得到的。

import java.io.File;
import java.io.IOException;
import java.util.Scanner;


public class Strip {
    public static void main(String[] args)
    {
        try
        {
            File file = new File("all.vmg");
            Scanner sc = new Scanner(file);
//          sc.useDelimiter("BEGIN:VMSG");
            while (sc.hasNext())
            {
            String string = sc.next();
            System.out.println(string);
            }

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }


}

它编译并运行良好。虽然它不会打印出单一的东西。首先我使用现在评论的Delimiter。然后认为可能存在问题。所以现在它只使用它的默认空白分隔符。但无论如何都不打印任何行。所有我必须猜测的是由于某种原因hasNext不评估真实吗? * .vmg文件是一般格式为

的文本文件
BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:
X-IRMC-BOX:INBOX
X-NOK-DT:20110224T215100Z
X-MESSAGE-TYPE:DELIVER
BEGIN:VCARD
VERSION:3.0
N:
TEL:+37999999999
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:24.02.2008 21:51:00
Sample mobile text message 
END:VBODY
END:VENV
END:VMSG

我还尝试将其他几个简单的文本文件提供给脚本,但没有打印出来。

3 个答案:

答案 0 :(得分:0)

hasNext()匹配任何。在尝试查找匹配项时,它使用模式(?s).*

尝试使用使用换行符作为分隔符的hasNextLine

答案 1 :(得分:0)

首先,根据你在另一个答案中的评论,该程序正在抛出你没有抓到的东西。将catch中的异常类型更改为普通Exception类,以确保您可以捕获任何Throwable

一旦修复,你就可以解决实际问题。

编辑:所以我把你提供的代码粘贴到Eclipse中,以及文件的内容,然后运行它没有任何问题。在这一点上,我不知道问题是什么,除了由于某种原因它找不到文件。但是,如果是这种情况,则会产生非常明显的错误。

在任何情况下,看起来你已经自己解决了这个问题,但是我又不知道为什么会这样做而你原来没有。

答案 2 :(得分:0)

好的,这让脚本工作了。但我不知道如何。所以也许有人可以告诉我幕后发生的事情可以这么说。我发布它作为答案,因为它有点解决方案,也因为编辑原始问题会使它长得很长。

不同之处在于我在while循环之前启动了扫描仪对象。并且我使用了filereader和bufferedreader来进行扫描程序输入(虽然它的手册说根据我的第一个脚本,文件对象应该没问题)

import java.io.*;
import java.util.Scanner;


public class Strip {
    public static void main(String[] args)
    {
Scanner sc = null;
        try
        {
            sc = new Scanner(new BufferedReader(new FileReader("all.vmg")));
            sc.useDelimiter("BEGIN:VMSG");
            while (sc.hasNextLine())
            {
            System.out.println(sc.nextLine());
            }
            sc.close(); 
        }
        catch (Exception e)
        {
           System.out.println("Caught Something whatever?");
        }

    }


}
相关问题