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,然后将字符串解析为所需的数组。嗯,是的,我想,我只是希望有另一种方法只使用分隔符。我看不出它有任何问题。