Ниже приведен фрагмент структуры формата текстового файла.
Historical Sales for: 12th of October 2019, 11:37 am
PRODUCT NAME QUANTITY
Coke B 5
Historical Sales for: 21st of October 2019, 8:15 pm
PRODUCT NAME QUANTITY
Peanuts 2
Я хочу обрабатывать только метки столбцов и значения строк, но не включая основной заголовок; в данном случае История продаж за: 12 октября 2019 г., 11:37.
Это код, который я написал для обработки текста с помощью регулярного выражения (\\b)
StringBuilder temporary = new StringBuilder();
InputStream inputStream = new FileInputStream(new File(FILE_NAME));
BufferedReader readFile = new BufferedReader(new InputStreamReader(inputStream));
String next;
while ((next = readFile.readLine()) != null) {
temporary.append(next).append("\n");
}
next = String.format("%13s", ""); // spacing for column headers
System.out.println(temporary.toString().replaceAll("(\\b)", next));
\\b{3}
соответствует пустой строке в каждой позиции границы слова три раза. Итак, эффективное сопоставление пустой строки.\\b{3}
=\\b
- person Wiktor Stribiżew   schedule 18.06.2020for (; <condition> ;)
это то же самое, что иwhile (<condition>)
—while
является гораздо более естественной конструкцией для этого....while ( line = readFile.readLine() ) != null) { if (isHeaderLine(line) { continue; } temporaryData.append..... }
- person Stephen P   schedule 18.06.2020(\\b{3})
соответствует escape-символу, а затем символу b 3 раза. это то, что видит двигатель - person   schedule 19.06.2020(\\b{3})
, механизм регулярных выражений будет соответствовать этому\bbb
и только tyhat! какое отношение «Исторические сайты» имеют к этому регулярному выражению? - person   schedule 21.06.2020%13s
. Я исправлен, поскольку @Wiktor Stribiżew ясно указал на неэффективность моего регулярного выражения с помощью оператора\\b{3} = \\b
- person Marome   schedule 22.06.2020\\b{3} = \\b
опять же не имеет контекста, если обработчик регулярных выражений увидит\\b{3}
, он будет соответствовать \ +bbb
, тогда как\\b
будет соответствовать \ +b
.. они явно не совпадают, т.е.\\b{3}
!=\\b
- person   schedule 22.06.2020b{3}
. Спасибо за конструктивную критику, я буду читать дальше в регулярном выражении - person Marome   schedule 23.06.2020\b
эквивалентно\\b
в языке Java. Вот ссылка, baeldung.com/java-regexp-escape-char, находится в разделе Экранирование с помощью обратной косой черты. - person Marome   schedule 23.06.2020\\b
соответствует a \ + b. демо - › regex101.com/r/XIvBBb/1 . Кроме того, я не знаю\\b in the Java language
. - person   schedule 25.06.2020\\b
, прочитайте здесь stackoverflow.com /questions/8777982/issue-with-java-regex-b для получения дополнительной информации об использовании\b
и\\b
в языке Java. - person Marome   schedule 26.06.2020