如何在运行时更改fileScan分隔符?

时间:2013-12-06 18:49:40

标签: java file-io

所以我最近在FileScanner中使用多个分隔符时遇到了麻烦。 我想这样做,因为我的文件中的第一个字符串用逗号分隔,但在它进入下一行之前没有逗号,只有空格。这会将值分配给我的数组。

    public class FileScan
    {
         public static void main(String[] args) throws IOException
         {
              String[] firstName = new String[50];
              String[] lastName = new String[50];
              String[] number = new String[50];

              Scanner fileScan = new Scanner(new File("phonebook.txt");
              fileScan.useDelimiter(",");

              for(int i = 0; fileScan.hasNext(); i++)
              {
                   firstName[i] = new firstName[fileScan.next];
                   lastName[i] = new lastName[fileScan.next];
                   number[i] = new number[fileScan.next];

                   System.out.println(firstName[i] +"\t"+ lastName[i] +"\t"+ number[i]);
              }

因为文件看起来像这样:

    John, AppleSeed, 800-555-9000
    Jack, Torrance, 450-555-3000
    Elizabeth, MacDonald, 304-555-3042

我希望能够在运行时切换分隔符,以免造成错误。 但是,如果我这样做:

         fileScan.useDelimiter(",");
         firstName[i] = new firstName[fileScan.next];
         lastName[i] = new lastName[fileScan.next];
         fileScan.useDelimiter(" ");
         number[i] = new number[fileScan.next];

我仍然遇到错误。我能想到的唯一另一种可能性就是使用默认设置并尝试删除之后的逗号。有一个更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您是否考虑过读取一行,然后使用string.split来提取Fname和Lname。 How to split a string in Java

答案 1 :(得分:2)

Scanner.useDelimiter方法将PatternString的{​​{1}}表示作为参数。

您是否尝试过使用Pattern

这应该基于fileScan.useDelimiter(",\\s?");(可选地后跟一个空格)来划分您的项目。

例如:

您有一个名为,的文件,其中包含示例中的文字,路径为:foo.txt

以下是使用my/path/foo.txt

解析它的代码
Scanner

输出:

try {
    Scanner s = new Scanner(new File("my/path/foo.txt"));
    s.useDelimiter(",\\s?");
    while (s.hasNext()) {
        System.out.println(s.next());
    }
}
catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
}