我在谷歌上搜索了几个小时并得到了部分解决方案。
我对 Groovy 和正则表达式都很陌生。多年来我偶尔使用正则表达式,但我对它还很不满意。
我有一个简单的游戏,可以检查你与隐藏单词有多少相同的字母。
为了简单起见,假设单词是“pan”,而用户输入“can”。
我希望正则表达式的结果给我“an”。
现在,我已经通过这样做(在 Groovy 中)部分实现了这一点:
// Where "guess" is the user's try and "word" is the word they need to guess.
def expr = "[$word]"
def result = guess.find(expr)
结果字符串仅包含第一个匹配的字母。有人有更优雅的解决方案吗? 预先感谢
我认为这不是正则表达式的用例。您必须注意一些事情,例如不要让用户自动猜测是否输入
.*
等。
在我看来,典型的收集工作更适合这项任务。一种解决方案是找到两个单词的交集,将它们视为字符集:
(word as Set).intersect(guess as Set).join()
或者过滤密词中出现的猜测字符:
guess.findAll { word.contains(it) }.unique().join()
假设两个字符串是s1和s2 现在找到公共字符串:
commonString=s1.replaceAll("[^"+s2+"]","");
如果你的单词包含元字符那么 首先做:
Pattern.quote(s2);
然后
commonString=s1.replaceAll("[^"+s2+"]","");
你可以尝试:
guess.findAll( /[$word]/ ).join()