Witam, buduje swój projekt w Javie z użyciem biblioteki Apache POI. Będę bowiem budował pewien dokument Word na podstawie pewnego szablonu.
Mam szablon, w którym mam ok 100 wartości do podmiany. Zasadniczo ładuję plik ze strumieni i mam listę tych obiektów z wartościami jako szablon np. CURRENT_DATE, EMPLOYEE_NAME, EMPLOYEE_SURNAME itd który chciałbym podmieniać na realne dane i podstawie tego szablonu tworzyć wiele plików dla różnych osób. Nie chcę tracić styli dlatego po prostu najlepiej pozamieniać dane.
No i mam teraz coś takiego - ale to jest słabe, bo w jednej pętli wykona się np 100 ifów tylko po to aby zastąpić jedną wartość.
for (XWPFParagraph paragraph : document.getParagraphs()) {
XWPFRun run = extractRun(paragraph);
if (run.getText().isEmpty() == null) {
continue;
// pomijam puste paragrafy
}
String text = run.getText(0);
if (text.equals("CURRENT_DATE")) {
text = text.replace(LocalDateTime.now().format(dateFormatter));
run.setText(text);
}
if (text.equals("DOCUMENT_ID")) {
text = text.replace("DOCUMENT_ID", "ID12345");
run.setText(text);
}
if (text.equals("EMPLOYEE_NAME")){
text = text.replace("EMPLOYEE_NAME", "Jan Kowalski");
run.setText(text);
}
// i tak dalej kilkanaście wartości
}
Drugie rozwiązanie też słabe, bo pętla w pętli:
for (int i = 0; i < document.getParagraphs().size(); i++) {
String current = "CURRENT DATE";
for (XWPFParagraph paragraph : document.getParagraphs()) {
XWPFRun run = extractRun(paragraph);
if (run.getText().isEmpty()) {
continue;
// pomijam puste paragrafy
}
String text = run.getText(0);
if (text.equals(current)) {
text = text.replace(current, "JAKAS WARTOSC");
run.setText(text);
}
}
}
Macie jakiś pomysł jak wykonać wiele zamian różnych wartości w bardziej optymalny sposób niż O (n^2) ?