Добавьте один из следующих пунктов перед тем, как задавать группы.
matcher.find();
matcher.maches();
Как это работает:
Сопоставитель создается из шаблона
вызывая метод сопоставления шаблона.
После того, как создан, сопоставитель может быть использован для
выполнить три разных вида матча
операции:
Метод соответствует метод пытается найти соответствие
вся входная последовательность против
шаблон.
Метод lookingAt пытается найти соответствие
последовательность ввода, начиная с
начало, против образца.
Метод find сканирует ввод
последовательность ищет следующий
подпоследовательность, которая соответствует шаблону.
Источник: Java Api
Я лично рекомендую сначала удалить несколько пробелов, затем разделить и обрезать - альт простой, проверенный и работает.
Попробуйте это:
String s = "William Faulkner - 'Light In August'";
String o[] = s.replaceAll("\\s+", " ").split("-");
String author = o[0].trim();
String bookTitle = o[1].trim();
Если бы вы:
System.out.println(author);
System.out.println(bookTitle);
Тогда вывод будет:
William Faulkner
'Light In August'