问题描述:

My program need to add newline after every 3rd element in the arraylist. Here is my input file which contain the following data:

934534519137441534534534366, 0796544345345345348965,

796345345345544894534565, 734534534596544534538965 ,

4058991374534534999999, 34534539624, 91953413789453450452,

9137534534482080, 9153453459137482080, 405899137999999,

9653453564564524, 91922734534779797, 0834534534980001528, 82342398534

6356343430001528, 405899137999999, 9191334534643534547423752,

3065345782642564522021, 826422205645345345645621,

40584564563499137999999, 953453345344624, 3063454564345347,

919242353463428434451, 09934634634604641264, 990434634634641264,

40346346345899137999999, 963445636534653452, 919234634643325857953,

91913453453437987385, 59049803463463453455421, 405899137534534999999,

9192273453453453453758434,

and it goes on to multiple lines.

Code:

public class MyFile {

private static final Pattern ISDN =Pattern.compile("\\s*ISDN=(.*)");

public List<String> getISDNsFromFile(final String fileName) throws IOException {

final Path path = Paths.get(fileName);

final List<String> ret = new ArrayList<>();

Matcher m;

String line;

int index = 0;

try (

final BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);) {

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

m = ISDN.matcher(line);

if (m.matches()) {

ret.add(m.group(1));

index++;

if(index%3==0){

if(ret.size() == index){

ret.add(m.group(1).concat("\n"));

}

}

}

}

return ret;

}

}

}

网友答案:

I changed your code to read using the "new" Java 7 files I/O and corrected the use of a line separator, along with some formatting. Here I iterate over the list after it was completed. If it is really long you can iterate over it while constructing it.

public class MyFile {

    private static final Pattern ISDN = Pattern.compile("\\s*ISDN=(.*)");
    private static final String LS = System.getProperty("line.separator");

    public List<String> getISDNsFromFile(final String fileName) throws IOException {

        List<String> ret = new ArrayList<>();
        Matcher m;

        List<String> lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
        for (String line : lines) {
            m = ISDN.matcher(line);
            if (m.matches())
                ret.add(m.group(1));
        }
        for (int i = 3; i < ret.size(); i+=4)
            ret.add(i, LS);
        return ret;
    }
}
网友答案:

I think you do not need to compare the size of arraylist with index. Just remove that condition and try with this

if(index%3==0){                         
   ret.add(System.getProperty("line.separator"));
   }

Although I support the comment made by @Peter I would add them all to a List and only add the formatting when you print. Adding formatting in your data usually leads to confusion.

相关阅读:
Top