有没有办法绕着扫描仪(Java)推进一条线

时间:2018-03-01 23:12:05

标签: java io java.util.scanner

好的,所以我在扫描仪推进额外线路方面遇到了一些问题。我有一个文件,其中有许多行包含整数,每个整数由一个空格分隔。在文件的某个地方有一行没有整数,只有单词" done"。 当找到完成后,我们退出循环并打印出最大的整数,该整数小于每行中的每个给定整数(如果整数已经为prime,则不执行任何操作)。我们一直这样做,直到"完成"。

我的问题:假设文件包含6行,第6行是单词。我的输出会跳过第1,3和5行。它只返回第2行和第4行的正确值。

这是一段代码,我在其中阅读了以下内容中的值:

Scanner in = new Scanner(
                new InputStreamReader(socket.getInputStream()));
        PrintStream out = new PrintStream(socket.getOutputStream());

        while(in.nextLine() != "done"){


            String[] arr = in.nextLine().split(" "); 

现在我感觉问题是我的循环中的nextLine调用使行前进,然后nextline.split调用也使该行前进。因此,所有奇数行都将丢失。是否有另一种方法来检查"完成"没有前进或者是否有可能的命令我可以调用以某种方式将扫描仪重置回循环的开始?

2 个答案:

答案 0 :(得分:4)

问题是你有2次调用nextLine()尝试这样的事情

String line = in.nextLine();
while (!"done".equals(line)) {
     String[] arr = line.split(" ");

     // Process the line

     if (!in.hasNextLine()) {
         // Error reached end of file without finding done
     }

     line = in.nextLine();
}

另请注意,我修复了您应该使用"done"的{​​{1}}支票。

答案 1 :(得分:-1)

我认为你正在寻找这个

class RoomFilter(filters.FilterSet):
    price = filters.NumberFilter(name="price", lookup_expr='lte')
    features = filters.ModelMultipleChoiceFilter(
        name="features", 
        conjoined=True,
        queryset=Features.objects.all()
        )

    class Meta:
        model = Room
        fields = ['price', 'features']

class RoomSearchView(generics.ListAPIView):
    queryset = Room.objects.all()
    serializer_class = RoomSearchSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filter_class = RoomFilter