Is there a Java library to remove lines based on line number?
My aim is to remove lines based on line numbers.
Example
- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
- egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.
- Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris
- placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum
- erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit
- eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.
- Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus
- faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat
- volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
remove lines 3,4,5 output should be
- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
- egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.
- eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.
- Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus
- faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat
- volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
I have made a working method
import org.apache.commons.io.FileUtils;
//...
private String removeLines(List<Integer> removeLines, File text) throws IOException {
List<String> textLines = FileUtils.readLines(text, StandardCharsets.UTF_8);
if (argsStrings.contains(Flags.DEBUG_FLAG)) {
String format = String.format("%d from %d need to be removed", removeLines.size(), textLines.size());
Logger.getLogger(App.class.getName()).log(Level.INFO, format);
}
int i = textLines.size();
while (!removeLines.isEmpty()) {
Integer line = new Integer(i + 1);
if (argsStrings.contains(Flags.DEBUG_FLAG)) {
String format = String.format("%4d. line inspected", line);
Logger.getLogger(App.class.getName()).log(Level.INFO, format);
}
if (removeLines.contains(line)) {
if (argsStrings.contains(Flags.DEBUG_FLAG)) {
String format = String.format("%4d. line removed, line text is below%n%s", line, textLines.get(i));
Logger.getLogger(App.class.getName()).log(Level.INFO, format);
}
textLines.remove(i);
removeLines.remove(line);
}
i--;
}
StringBuilder sb = new StringBuilder();
for (String line : textLines) {
sb.append(line);
sb.append(System.lineSeparator());
}
return sb.toString();
}
Is there a simpler way to do this?