我试图实现的结果是,如果用户输入单词,复数或单数,正则表达式应该返回true
例如’我想要的 无人驾驶飞机 </跨度> ‘或’我想通过无人机’。
@Test public void testProductSearchRegexp(){ String regexp =“(?i)。*?\ b%s \ b。*?”;
字符串查询=“我想要 无人驾驶飞机 </跨度> 与FLIR Duo“;
字符串数据1 =“ 无人驾驶飞机 </跨度> “; 字符串数据2’
英语是一种有许多例外的语言。检查单词是否以's'结尾仅仅不足以确定它是否为复数。
解决此问题的最佳方法是不解决此问题。它之前已经完成了。利用这一点。一种解决方案是使用第三方API。 OED有一个 , 例如。
如果您要向其API发出请求,例如:
/entries/en/mice
你会得到一个包含以下内容的JSON响应:
"crossReferenceMarkers": [ "plural form of mouse" ],
从那里它应该很容易解析。简单地检查“复数”一词的存在可能就足够了。
他们甚至可以使用可以复制和粘贴的Java示例。
这种方法的一个优点是没有编译时依赖性。缺点是您依赖于能够发出HTTP请求。另一个原因是你受到任何限制所限制。 OED允许每月最多3k个请求和60个请求/分钟的免费计划,这对我来说似乎很合理。
没有外部资源,这样的事情很难实现。当然很多复数的单词以's'结尾,但也有很多例外,例如“刀”和“刀”或“仙人掌”和“仙人掌”。为此,您可以使用地图对这些进行排序。
public static String getPlural(String singular){ String plural; HashMap<String,String> irregularPlurals = new HashMap<>(); irregularPlurals.put("cactus","cacti"); irregularPlurals.put("knife","knives"); irregularPlurals.put("man","men"); /*add all your irregular ones*/ plural = irregularPlurals.get(singular); if (plural == null){ return singular + "s"; }else{ return plural; } }
非常简单,不太实用,但只有几句话才能完成工作。