Pattern和Matcher java问题,最后一个元素为null



我遇到了一个问题,我不明白为什么在使用matcher和pattern后,控制台中的最后一个元素为null。而且我也摆脱不了

我的文件是这样的:

[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));

最后一次打印看起来像:[乔纳斯,乔纳蒂斯,21,空]

在您的代码中,您正在声明一个名为output of 4 elements的String数组。当你这样做时,所有这些值都是空的:

[null,null,null]

在行中:

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

您正在更改此数组值,在这种情况下,您将填充如下结果:

["Jonas","Jonatis","21",null]

你错过了最后一个,这就是原因,因为它为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);

最新更新