Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 扫描仪';s nextLine(),仅获取部分_Java_Java.util.scanner - Fatal编程技术网

Java 扫描仪';s nextLine(),仅获取部分

Java 扫描仪';s nextLine(),仅获取部分,java,java.util.scanner,Java,Java.util.scanner,因此,使用类似于: for (int i = 0; i < files.length; i++) { if (!files[i].isDirectory() && files[i].canRead()) { try { Scanner scan = new Scanner(files[i]); System.out.println("Generat

因此,使用类似于:

for (int i = 0; i < files.length; i++) {
            if (!files[i].isDirectory() && files[i].canRead()) {
                try {
                    Scanner scan = new Scanner(files[i]);
                System.out.println("Generating Categories for " + files[i].toPath());
                while (scan.hasNextLine()) {
                    count++;
                    String line = scan.nextLine();
                    System.out.println("  ->" + line);
                    line = line.split("\t", 2)[1];
                    System.out.println("!- " + line);
                    JsonParser parser = new JsonParser();
                    JsonObject object = parser.parse(line).getAsJsonObject();
                    Set<Entry<String, JsonElement>> entrySet = object.entrySet();
                    exploreSet(entrySet);
                }
                scan.close();
                // System.out.println(keyset);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }
    }
以上大部分数据已被清理(但不是URL(大多数情况下…)

该URL继续如下所示: $(KGrHqZHJCgFBsO4dC3MBQdC2)Y4Tg~~60_1.JPG?set_id=880005007 在文件中

所以有点恼火

这也是条目#112,我已经让其他文件解析没有错误。。。但这件事让我心烦意乱,主要是因为我不知道scan.nextLine()是如何工作的

通过调试输出,JSON错误是由未正确拆分字符串引起的

几乎忘记了,如果我尝试将有问题的行放在它自己的文件中并解析它,它也可以正常工作

编辑: 如果我在同一个地方移除了冒犯的线,也会爆炸

尝试使用JVM 1.6和1.7


解决方案: BufferedReader scan=新BufferedReader(新文件读取器(文件[i]);
根据您的代码,我可以给出最好的解释,而不是scanner…

根据scanner.nextLine()使用的标准,这一行确实在
“~~”
之后结束

线末端的标准为:

  • 与此正则表达式匹配的内容:
    “\r\n |[\n\r\u2028\u2029\u0085]”
  • 输入流的结尾
您说文件在
“~~”
之后继续,所以让我们把EOF放在一边,看看正则表达式。将匹配以下任何一项:

常用的线路分离器:

。。。扫描器也能识别三种不寻常的线条分隔符

  • 0x0085是“ISO C1控制”组中的
    或“下一行”控制代码
  • 0x2028是Unicode“行分隔符”字符
  • 0x2029是Unicode“段落分隔符”字符
我的理论是,您的输入文件中有一个“不寻常”的表单,而这不会出现在。。。。无论您使用什么工具来检查文件


我建议您使用能够显示文件实际字节的工具检查输入文件;e、 g.Linux/Unix系统上的
od
实用程序。另外,请检查这不是由某种字符编码不匹配引起的。。。或者尝试以文本形式读取或写入二进制数据

如果这些都没有帮助,那么下一步应该是使用IDE的Java调试器运行应用程序,并通过
Scanner.hasNextLine()
nextLine()
调用单步执行,以了解代码实际在做什么


几乎忘记了,如果我尝试将有问题的行放在它自己的文件中并解析它,它也可以正常工作


那很有趣。但是,如果用于提取线的工具与未显示(假设的)异常线分隔符的工具相同,则此证据不可靠。提取过程可能会改变导致问题的“内容”。

您是否正在读取一个尚未完全写入的文件?因此,文件中的第112行出现混乱,之前一行都没有?在第111行爆炸,文件已完全写入,所以有一行不同的解决方法是:BufferedReader scan=new BufferedReader(new FileReader(files[i]);我发现#2029分散在输入文件的十六进制中。
  ->0   {"Flags":"0","transactions":{"totalTransactionAmount":"0","totalQuantitySold":"0"},"listingStatus":"NULL","conditionRollupId":"0","photoDisplayType":"0","title":"NULL","quantityAvailable":"0","viewItemCount":"0","visitCount":"0","itemCountryId":"0","itemAspects":{   ...  "sellerSiteId":"0","siteId":"0","pictureUrl":"http://somewhere.com/45/x/AlphaNumeric/$(KGrHqR,!rgF!6n5wJSTBQO-G4k(Ww~~
!- {"Flags":"0","transactions":{"totalTransactionAmount":"0","totalQuantitySold":"0"},"listingStatus":"NULL","conditionRollupId":"0","photoDisplayType":"0","title":"NULL","quantityAvailable":"0","viewItemCount":"0","visitCount":"0","itemCountryId":"0","itemAspects":{   ...  "sellerSiteId":"0","siteId":"0","pictureUrl":"http://somewhere.com/45/x/AlphaNumeric/$(KGrHqR,!rgF!6n5wJSTBQO-G4k(Ww~~