соответствие строки именам файлов с регулярным выражением (Java 1.6) - PullRequest
0 голосов
/ 22 января 2011

У меня есть несколько изображений с такими именами, как nineDiamonds.gif и aceHearts.gif, а также класс «Card» для лиц, играющих в карты.

В конструкторе я хочу передать строку изназвание карты и сможете создать JPanel с нужным изображением.Достаточно просто, но я хочу иметь возможность передавать такие вещи, как:

  • "9 червей" => nineHearts.gif
  • "9 червей" => nineHearts.gif
  • "nine of Hearts" => nineHearts.gif
  • Integer.toString (9) + "hearts" => nineHearts.gif
  • Integer.toString (1) + "hearts "=> aceHearts.gif
  • " Ace of hearts "=> aceHearts.gif

Я понимаю, что могу перегрузить конструктор и сопоставить все с переключателем, а что нет,но то, что я действительно ищу, - это элегантное, функциональное решение стиля, что-то вроде:

String fileName = name.replaceAll("magic regex") + ".gif";

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 января 2011

Одного .replaceAll() будет недостаточно.

Строчная строчка. (\S+)\s*(?:of)?\s*(hearts|clubs|diamonds|spades) проанализирует 9 of hearts и 9hearts до ("9", "сердца") и aceofclubs до ("туз", "трефы"). Создайте карту, которая отображает «1» в «туз», ... «13» в «король»; пропустите первые группы матча через него. Тогда создание имени файла становится тривиальным.

1 голос
/ 22 января 2011

Вот несколько советов, которые помогут вам найти рабочее решение:

  • Обрезать слово "of" с помощью регулярного выражения с границами слова (\bof\b)
  • Заменить числовые строки их соответствующими словами (можно сделать с помощью карты, определяющей числа (например, map[9] = "nine") и цикл for)
  • Используйте String.split(), чтобы разбить границы слов, затем запишите все слова, кроме первого, и снова присоединитесь

Так что, в конце концов, само по себе регулярное выражение не является лучшим решением, как это часто бывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...