Лучше использовать регулярное выражение или Stringtokenizer, чтобы найти автора и название книги в этом: Уильям Фолкнер - «Light In August» - PullRequest
0 голосов
/ 18 октября 2010

Лучше использовать regex или Stringtokenizer для разделения автора и заголовка в этой строке:

William Faulkner - 'Light In August'

Это самый простой regex, который будет работать?*

Это излишне или есть более простой способ сделать это с Stringtokenizer?

В основном я ищу наиболее прозрачное и поддерживаемое решение, так как у меня нет хорошего пониманияregex и получил помощь по вышеуказанному.

Ответы [ 3 ]

2 голосов
/ 18 октября 2010

Насколько вы контролируете вход? Можете ли вы гарантировать, что автор и заголовок всегда будут разделены " - " (пробел, тире и пробел)? Вы точно знаете, что автор не будет содержать " - "? И так далее.

Если ввод достаточно жесткий, тогда вы можете просто использовать String#split(), что должно очень ясно понять, что вы делаете. Не используйте StringTokenizer ( source ):

StringTokenizer - это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функцию, рекомендуется использовать вместо этого метод split String или пакет java.util.regex.

Ответ Марк Байерс показывает, как использовать split().

Однако, если вам нужно беспокоиться о большем разнообразии входных данных (например, может ли количество пробелов вокруг тире быть переменным или не существовать вообще?), Тогда использование регулярного выражения будет кратким и кратким. Компромиссом является читаемость кода и ясность намерений.

1 голос
/ 18 октября 2010

Как насчет использования String.split?

String s = "William Faulkner - 'Light In August'";
String[] parts = s.split(" - ", 2);
String author = parts[0];
String title = parts[1];

ideone

Следует обратить внимание на то, что имена некоторых авторов и названия книг содержат дефисы, так чторасщепление только на дефисе не всегда будет работать вообще.

1 голос
/ 18 октября 2010

Это зависит от того, как выглядит вход.Например, ваше регулярное выражение не сработает для имен авторов, которые содержат дефис.

Возможно, что-то вроде

Pattern.compile("^\\s*(.*?)\\s+-\\s+'(.*)'\\s*$")

может подойти немного лучше.

...