Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时更改fileScan分隔符?_Java_File Io - Fatal编程技术网

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

Java 如何在运行时更改fileScan分隔符?,java,file-io,Java,File Io,因此,我最近在文件扫描程序中使用多个分隔符时遇到了麻烦。 我希望这样做,因为我的文件中的第一个字符串用逗号分隔,但在它进入下一行之前,没有逗号,只有一个空格。这会给我的数组赋值带来问题 public class FileScan { public static void main(String[] args) throws IOException { String[] firstName = new String[5

因此,我最近在文件扫描程序中使用多个分隔符时遇到了麻烦。 我希望这样做,因为我的文件中的第一个字符串用逗号分隔,但在它进入下一行之前,没有逗号,只有一个空格。这会给我的数组赋值带来问题

    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];

我仍然会出错。我唯一能想到的其他可能性就是使用默认值,然后尝试去掉逗号。有更好的方法吗

您是否考虑过在中读取一行,然后使用string.split拉出Fname和Lname。


您是否考虑过在中读取一行,然后使用string.split拉出Fname和Lname。


Scanner.useDelimiter方法将
模式
模式
字符串
表示作为参数

您是否尝试过简单地使用
fileScan.useDelimiter(“,\\s?”)

它应该根据
和一个空格来分隔项目

例如:

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

下面是使用
扫描仪对其进行解析的代码

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();
}
输出:

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

Scanner.useDelimiter
方法将
模式
模式
字符串
表示作为参数

您是否尝试过简单地使用
fileScan.useDelimiter(“,\\s?”)

它应该根据
和一个空格来分隔项目

例如:

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

下面是使用
扫描仪对其进行解析的代码

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();
}
输出:

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

你遇到了哪些错误?@BlackPlanet我现在无法直接访问计算机,无法运行它,但我相信这是输入不匹配异常。你遇到了哪些错误?@BlackPlanet我现在无法直接访问计算机,无法运行它,但我相信这是输入不匹配异常。参数(“,\\s”);会让文件扫描程序知道在两个逗号后拆分空格吗?如果是这样的话,那正是我想要的@Friabb我真的开始怀疑我是否误解了你的问题。请尝试我指示的
模式
,并告诉我它是否显示正确的结果。否则,请使用准确的输入与输出编辑您的答案。问题在于从第一行的最后一个字符串到第二行的第一个字符串,因为它仅基于逗号进行分隔,数字和名字放在同一个数组中,并且文件末尾的最后一个数组没有被处理。@friabb因此我在回答中指出的
模式在您的情况下应该可以正常工作。几秒钟后,我将在我的答案中添加一个示例。参数(“,\\s”);会让文件扫描程序知道在两个逗号后拆分空格吗?如果是这样的话,那正是我想要的@Friabb我真的开始怀疑我是否误解了你的问题。请尝试我指示的
模式
,并告诉我它是否显示正确的结果。否则,请使用准确的输入与输出编辑您的答案。问题在于从第一行的最后一个字符串到第二行的第一个字符串,因为它仅基于逗号进行分隔,数字和名字放在同一个数组中,并且文件末尾的最后一个数组没有被处理。@friabb因此我在回答中指出的
模式在您的情况下应该可以正常工作。几秒钟后,我将在我的答案中添加一个示例。这也可以工作,但比我预期的要复杂一些。代码并没有那么糟糕。只需读入该行,运行一段时间,确保它不是EOF,然后将字符串解析为所需的数组。嗯,是的,我想,我只是希望有另一种方法只使用分隔符。我看不出它有任何问题。这也可以,但比我预期的要复杂一点。代码并没有那么糟糕。只需读入该行,运行一段时间,确保它不是EOF,然后将字符串解析为所需的数组。嗯,是的,我想,我只是希望有另一种方法只使用分隔符。我看不出它有任何问题。