Java扫描程序问题

Java扫描程序问题,java,java.util.scanner,Java,Java.util.scanner,我在用java读取文本文件时遇到问题。文本文件的格式如下: String String String String Int Int Int Int 每个字符串和int值的末尾都有一个新行字符,stings和int之间有一个空行。我想把每一个字符串值保存到一个字符串数组中,但是我不知道如何让扫描仪在空白行停止。我尝试了各种方法,比如直到有一个int,直到hasNext的值为,然后尝试只读取字符串,但什么都不起作用。有人能提供帮助吗 while (mScanner.hasNextLine()

我在用java读取文本文件时遇到问题。文本文件的格式如下:

String
String
String
String

Int 
Int
Int 
Int
每个字符串和int值的末尾都有一个新行字符,stings和int之间有一个空行。我想把每一个字符串值保存到一个字符串数组中,但是我不知道如何让扫描仪在空白行停止。我尝试了各种方法,比如直到有一个int,直到hasNext的值为,然后尝试只读取字符串,但什么都不起作用。有人能提供帮助吗

while (mScanner.hasNextLine()){
    String line = mScanner.nextLine();
    if (line.length() == 0)
        break;
    else
        mArrayList.add(line);//do stuff
}
cat dat

Foo

Bar

Foobar

Baz

1

2

4

8
测试: cat dat | java ScanIt

1: Foo
2: Bar
3: Foobar
4: Baz
4: 1
4: 2
4: 4
4: 8
正如你所看到的,我对文件格式有一个稍微不同的想法,但你看:我对换行符或空换行符没有做任何特殊的处理

所以这个计划也应该对你有用

cat dat

Foo

Bar

Foobar

Baz

1

2

4

8
测试: cat dat | java ScanIt

1: Foo
2: Bar
3: Foobar
4: Baz
4: 1
4: 2
4: 4
4: 8
正如你所看到的,我对文件格式有一个稍微不同的想法,但你看:我对换行符或空换行符没有做任何特殊的处理


因此,该程序也应该适用于您。

从您的示例中不确定您是否正好有4个字符串和4个整数或更多,因此类似于以下内容的内容应该适用:

List<String> strings = new ArrayList<String>();
List<Integer> ints = new ArrayList<Integer>();

while(scanner.hasNext() && !scanner.hasNextInt()) {
    strings.add(scanner.next());
}
while(scanner.hasNextInt()) { // If you also want to store the ints
    ints.add(scanner.nextInt());
}

从您的示例中不确定您是否正好有4个字符串和4个整数或更多,因此类似于以下内容的内容应该可以工作:

List<String> strings = new ArrayList<String>();
List<Integer> ints = new ArrayList<Integer>();

while(scanner.hasNext() && !scanner.hasNextInt()) {
    strings.add(scanner.next());
}
while(scanner.hasNextInt()) { // If you also want to store the ints
    ints.add(scanner.nextInt());
}

你为什么不逐行阅读呢?给我们看看你目前掌握的代码。另外,阅读所有的行,然后忽略你不想要的行可能会更容易。请发布你尝试过的内容,以便我们能够解决它。我尝试了各种方法,不幸的是“在问答网站上转储问题声明,绝望地举起手,希望有人能帮你做”——很少成功。我尝试了各种方法,我能给你看一下吗?你为什么不逐行阅读呢?给我们看看你目前掌握的代码。另外,阅读所有的行,然后忽略你不想要的行可能会更容易。请发布你尝试过的内容,以便我们能够解决它。我尝试了各种方法,不幸的是“在问答网站上转储问题声明,绝望地举起手,希望有人能帮你做”——很少成功。我尝试了各种方法,我能给他们看一下吗?这似乎效果更好,但当我将值添加到arraylist时,它只添加了第一个值。这似乎效果更好,但当我将值添加到arraylist时,它只添加了第一个值。我没有确切的值,我只是以4为例请注意,此解决方案会在字符串列表中按单词而不是按行添加新元素。一行中的foo bar会向列表中添加两个元素,如果其中一个字符串可以解析为整数,则此方法不起作用。例如,如果字符串行为5,则会发生异常。谢谢!字符串one可以工作,但int不能。我的文件实际上有几行整数,每行本身包含3个整数,由一个选项卡分隔。这就是为什么这对ints不起作用的原因吗?我也没有确切的数字,我只是以4为例请注意,此解决方案会在字符串列表中按单词而不是按行添加新元素。一行中的foo bar会向列表中添加两个元素,如果其中一个字符串可以解析为整数,则此方法不起作用。例如,如果字符串行为5,则会发生异常。谢谢!字符串one可以工作,但int不能。我的文件实际上有几行整数,每行本身包含3个整数,由一个选项卡分隔。这就是为什么ints不能工作的原因吗?