【问题标题】:Why Won't Split Recognize Pipes Even with "\\|"?为什么即使使用“\\|”也不会拆分识别管道?
【发布时间】: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.
  • 当使用indexOfcontains 时,不需要转义管道:indexOf("|")contains("|") 是你会使用的。
  • @Ivar,大多数线路都有管道。我认为 for each 循环在行实例化方面的位置导致了拆分问题和越界异常。
  • @AndyTurner,谢谢!我们成功地使用了 contains("|"),它帮助我们清理了 if 语句逻辑中的漏洞!

标签: java split java.util.scanner


【解决方案1】:

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

【讨论】:

  • 这是一个简单的编程错误,对其他人毫无用处,因为他们甚至不可能找到这个问题/答案。所以请删除问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 2022-09-23
相关资源
最近更新 更多