首页 > 解决方案 > 为什么即使使用“\\|”也不会拆分识别管道?

问题描述

我们正在尝试读取文件,然后按管道拆分。代码正在读取文件,但无法识别管道。例如,文件中的一行是 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。相反,我们得到了数组的越界异常。

标签: javasplitjava.util.scanner

解决方案


我相信,foreach 循环的位置有问题。它不断尝试拆分同一行,最终导致一个没有索引为 1 的数组。


推荐阅读