【问题标题】:Why is the useDelimiter works like that?为什么 useDelimiter 会这样工作?
【发布时间】:2020-09-26 21:54:57
【问题描述】:

我一直在尝试读取包含如下文本文件的文件夹:

K.Love,CLE,miss,2
K.Leonard,TOR,miss,2
K.Love,CLE,make,1
...

我正在做一些测试,由于某种原因,当我使用useDelimeter 忽略或使逗号消失时,我遇到了一个问题。我先展示代码:

import java.io.*;
import java.util.*;

public class test {
    public static void main(String[] args) throws FileNotFoundException {
        File inputFile = new File("src\\main\\resources\\games\\game1.txt");
        Scanner reader = new Scanner(inputFile);
        reader.useDelimiter(",");
        ArrayList<String> names = new ArrayList<>();
        while (reader.hasNext()) {
            String input = reader.next();
            names.add(input);
        }
        System.out.println(names.get(3));
        reader.close();
    }
}

当控制台在位置 3 打印 arrayList 时,我期望的是:

K.Leonard

但不是这样打印:

2
K.Leonard

当我将位置更改为 4 号时,它会打印:TOR(这是一个团队的名称)。

【问题讨论】:

  • “2”和“K.Leonard”之间没有,,那么为什么他们独立获取?
  • 哦,很抱歉问这个问题,但是我该如何解决呢?我对编程很陌生,很抱歉我的无知。
  • 最好使用 CSV 库而不是扫描仪

标签: java java.util.scanner delimiter


【解决方案1】:

您将分隔符定义为,,这意味着换行符不再是分隔符。要获得您期望的行为,您可以使用正则表达式,其中 , 或换行符被视为分隔符:

reader.useDelimiter("[,\n]");

【讨论】:

  • @UnNameSAS 该正则表达式存在严重问题 - 它不适用于 Windows 或 Windows 格式的文本输入。试试",|\r?\n"
猜你喜欢
  • 2016-10-04
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
相关资源
最近更新 更多