Почему бы не использовать синтаксический анализатор XML до синтаксический анализ XML ?
Несмотря на то, что, глядя на пример XML, он не так хорош, так как он моделирует map
вместо моделирования <song>
Глядя на свое регулярное выражение, почему вы ищете строку, заканчивающуюся \n
. Похоже, что вы сопоставляете каждую строку по очереди, и я не верю, что они будут содержать символ новой строки.
Однако этот метод, который не использует сканер, работает. Обратите внимание, что я изменил регулярное выражение, чтобы убрать окончание строки.
Map<String, String> songMap = new HashMap<String, String>();
Pattern pattern = Pattern
.compile(".*<key>(.+)</key><(.+)>(.+)</.+>.*");
String[] lines = songString.split("\n");
for (String line : lines) {
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
songMap.put(matcher.group(1), matcher.group(3));
}
}
Возможно, вы также можете настроить его на работу со сканером.