Java Stream API может помочь
String raw ="name1|value1\n" +
"name2|value2";
String template = "<data attribute=\"%s\">%s</data>";
String output = Arrays.stream(raw.split("\n"))
.map(rawPair -> rawPair.split("\\|"))
.map(pair -> String.format(template, pair[0], pair[1]))
.collect(Collectors.joining("\n"));
будет выводить
<data attribute="name1">value1</data>
<data attribute="name2">value2</data>
Но наличие определенной бизнес-логики требует немного больше движений. Сначала получите код страны , а затем украсьте имя вашего атрибута при обработке потока
BiFunction<String, String, String> decorate = (String name, String code) -> {
if ("state".equals(name)) {
return name + code;
} else {
return name;
}
};
Function<String, String> countryCode = (String source) -> {
String head = "country|";
int start = source.indexOf(head) + head.length();
return source.substring(start, start + 2);
};
String code = countryCode.apply(raw);
...
.map(pair -> String.format(template, decorate.apply(pair[0], code), pair[1]))
...