我开始编写一个可以解析旧式.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
我还尝试将其他几个简单的文本文件提供给脚本,但没有打印出来。
答案 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?");
}
}
}