模式和Matcher Java问题,最后一个元素为null

时间:2018-12-03 16:41:36

标签: java

我遇到的一个问题是我不明白为什么在使用匹配器和模式后控制台中的最后一个元素为空。而且我也不能摆脱,[]

这是我的文件的外观:

[Programuotojo vardas: Jonas, pavarde: Jonaitis, amzius: 21, programavimo kalba: Java]

我的代码:

private void vartotojoIvedimasIsFailo() {
    File FILE = new File(pasirenkantDarbuotojusIsFailo);
    if (FILE.exists() && FILE.length() > 0) {
        try {
            Scanner SC = new Scanner(FILE);
            for (int i = 0; i < FILE.length(); i++) {
                if (SC.hasNextLine()) {
                    String storage = SC.nextLine();
                    System.out.println("ID: " + i + " " + storage);
                }
            }
            Scanner SI = new Scanner(System.in);
            int vartotojoPasirinkimas = Integer.parseInt(SI.nextLine());
            String line = Files.readAllLines(Paths.get(pasirenkantDarbuotojusIsFailo)).get(vartotojoPasirinkimas);
            Pattern pattern = Pattern.compile(":(.*?),(.*?)");
            Matcher matcher = pattern.matcher(line);
            String[] output = new String[4];
            int i = 0;
            while (matcher.find()) {
                output[i++] = matcher.group(1).trim().replace(",", "");
            }
            System.out.println(Arrays.toString(output));

最后一个println看起来像:[Jonas,Jonaitis,21,null]

1 个答案:

答案 0 :(得分:1)

在您的代码中,您声明一个String数组,称为4个元素的输出。当您执行此操作时,所有这些值都为空:

[null,null,null,null]

在这行中:

  while (matcher.find()) {
            output[i++] = matcher.group(1).trim().replace(",", "");
        }

您要更改此数组的值,在这种情况下,您要像这样填充结果:

[“乔纳斯”,“乔纳斯”,“ 21”,空]

您遗漏了最后一个,这就是原因,因为它为null。

其他...如果您有4个以上的匹配项,则将导致ArrayIndexOutOfBoundsException。

考虑使用列表进行输出:

List<String> output = new ArrayList<>();
    System.out.println(matcher.groupCount());
    while (matcher.find()) {
        System.out.println(matcher.group(1).trim());
        output.add(matcher.group(1).trim().replace(",", ""));

    }
    output.forEach(System.out::println);