Если вы собираетесь напечатать только строки:
PRODUCT NAME QUANTITY
Chips 2
Coke B 5
And similares. Я предлагаю вам использовать потоки Java 8 и использовать приведенное ниже регулярное выражение для удаления нежелательных строк:
public static void main(String[] args) throws Exception {
String collect = Files.lines(Paths.get("file.txt"))
.filter(line -> !line.matches("^Historical Sales for.*$") && !line.matches("^\\s*$"))
.map(line -> line+="\n")
.collect(Collectors.joining());
System.out.println(collect);
}
Таким образом вы получите:
PRODUCT NAME QUANTITY
Chips 2
Coke B 5
PRODUCT NAME QUANTITY
(...)
Одно из преимуществ использования потоков это метод .collect()
, который позволяет вам анализировать строку непосредственно в List
.
Если вы хотите сохранить свой пример, вы можете сделать:
StringBuilder temporaryData = new StringBuilder();
InputStream inputStream = new FileInputStream(new File("file.txt"));
BufferedReader readFile = new BufferedReader(new InputStreamReader(inputStream));
String next;
while ((next = readFile.readLine()) != null) {
temporaryData.append(next).append("\n");
}
next = String.format("%13s", ""); // spacing for column headers
String formattedString = temporaryData.toString().replaceAll("(\\b{3})", next);
String stringWithoutHeaders = formattedString.replaceAll("^Historical Sales for.*$", "").replaceAll("^\\s*$", "");
System.out.println(stringWithoutHeaders);