【发布时间】:2019-06-09 18:40:40
【问题描述】:
我们正在尝试读取一个文件,然后通过管道进行拆分。代码正在读取文件,但无法识别管道。例如,文件中的一行是 Cola|0,在拆分为数组后,我们得到了数组 [1] 的越界异常。如果线路被正确分割,那肯定存在。
当我们有一个 if(line.contains"\|") 时,即使行中有管道,它每次都返回 true。我们尝试在 while 中使用 nextInt 而不是 nextLine,但它立即返回 false 并结束了 while(它不应该这样做,因为肯定有数字)。
我们也试过用 indexOf("\|")+1 到最后的 substring,还是不行。为什么不接管?
try (Scanner fileScanner = new Scanner(file)) {
while (fileScanner.hasNextLine()) {
String line = fileScanner.nextLine();
if (!line.contains("$")) {
for (String item : productsSold.keySet()) {
String[] productDetails = line.split("\\|");
productsSold.put(item, Integer.parseInt(productDetails[1]));
Cola|0 应该使数组的第二行为 0。相反,我们得到了数组越界异常。
【问题讨论】:
-
您是否尝试打印
line?它包含什么?此外,每一 行是否包含|?"Cola|0".split("\\|")works just as expected. -
当使用
indexOf和contains时,不需要转义管道:indexOf("|")和contains("|")是你会使用的。 -
@Ivar,大多数线路都有管道。我认为 for each 循环在行实例化方面的位置导致了拆分问题和越界异常。
-
@AndyTurner,谢谢!我们成功地使用了 contains("|"),它帮助我们清理了 if 语句逻辑中的漏洞!
标签: java split java.util.scanner