如何将 ArrayList 中的最后一个元素存储到另一个 ArrayList (Java)

我有一个文本文件,读取


NFR1: (some text) 

NFR2: (some text)

NFR3: (some text)

我想将具有模式“N”的文本文件中的所有字符串分组。


这是我到目前为止的代码:


import java.util.List;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.regex.Matcher;

import java.util.regex.Pattern;


public class Main {


public static void main(String[] args) throws FileNotFoundException {

    List<String> result = new ArrayList<String>();

    Pattern patt = Pattern.compile("^N.*");

    BufferedReader r = new BufferedReader(new FileReader("fileName"));


    String line;

    try {

        while ((line = r.readLine()) != null) {

          Matcher m = patt.matcher(line);

          while (m.find()) {


            int start = m.start(0);

            int end = m.end(0);

            result.add(m.group());

            System.out.println(result);

          }

        }

    } catch (IOException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }


}

}

输出如下:


[NFR1:]

[NFR1:,NFR2:]

[NFR1:,NFR2:,NFR3]

我如何让数组只读


[NFR1:,NFR2:,NFR3]

没有上面的其他两个元素?


当我添加代码行以获取最后一个元素时:


if (result != null && !result.isEmpty()) {

              System.out.println("Last element is:");

              System.out.println(result.get(result.size()-1));

             }

输出是:


The last element is:

NFR1:

The last element is:

NFR2:

The last element is:

NFR3:

我究竟做错了什么?


慕无忌1623718
浏览 164回答 2
2回答

米脂

你没有做错任何逻辑。只是您在 while 循环内而不是在外面打印。while ((line = r.readLine()) != null) {&nbsp; Matcher m = patt.matcher(line);&nbsp; while (m.find()) {&nbsp; &nbsp; int start = m.start(0);&nbsp; &nbsp; int end = m.end(0);&nbsp; &nbsp; result.add(m.group());&nbsp; &nbsp; //System.out.println(result); printing inside and so first u add 1 then 2 then 3.&nbsp; }}System.out.println(result);//Move hereif(!result.isEmpty()){//result != null is redundant. You have already initialized.&nbsp; System.out.println("Last element is:" + result.get(result.size() - 1));}

MM们

因为您在循环中打印输出,每个循环都会有一个输出。要纠正它,只需将输出移出循环即可。例如List<Integer> rest = new ArrayList<Integer>();for(int i=0;i<2;i++){rest.add(i);System.out.println(result);}输出i=0: [0]i=1: [0,1]纠正它:List<Integer> rest = new ArrayList<Integer>();for(int i=0;i<2;i++){rest.add(i);}System.out.println(result);结果将输出 [0,1]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java