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~~