使用正则表达式将字符串与文件名匹配(java 1.6)

时间:2011-01-22 19:16:45

标签: java regex

我有一堆图像,其名称为nineDiamonds.gif和aceHearts.gif以及用于扑克牌面孔的“卡片”类。

在构造函数中,我想传递卡片名称的字符串,并能够创建具有正确图像的JPanel。很容易,但我希望能够传递诸如以下内容:

  • “心中的9”=> nineHearts.gif
  • “9 hearts”=> nineHearts.gif
  • “九心”=> nineHearts.gif
  • Integer.toString(9)+“hearts”=> nineHearts.gif
  • Integer.toString(1)+“hearts”=> aceHearts.gif
  • “心中的王牌”=> aceHearts.gif

我知道我可以重载构造函数并使用开关匹配,但事实并非如此,但我真正追求的是优雅,功能性的解决方案,其中包括以下内容:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

一个.replaceAll()是不够的。

小写你的字符串。 (\S+)\s*(?:of)?\s*(hearts|clubs|diamonds|spades)会将9 of hearts9hearts解析为(“9”,“heart”),aceofclubs解析(“ace”,“俱乐部”)。创建一个映射“1”到“ace”,...“13”到“king”的地图;通过它传递比赛的第一组。然后创建文件名变得微不足道。

答案 1 :(得分:1)

以下是一些可以帮助您找到有效解决方案的提示:

  • 使用带有字边界(\bof\b
  • 的正则表达式删除“of”一词
  • 将数字字符串替换为各自的字词(可以使用定义数字的地图(例如map[9] = "nine")和for循环来完成)
  • 使用String.split()分割字边界,然后对除第一个字以外的所有字体进行处理并重新加入

所以最后,单独的正则表达式并不是最常见的解决方案。