我编写了一个用Regex验证输入字符串的方法 我为每个输入字符串构建正则表达式 如果发现任何匹配,我正在提取密钥和值
public Matcher matchRegExPattrenWithInputString(String inputString) {
LOGGER.info("Mathcing the Input String " +inputString);
Matcher matcher = null;
for (Pattern pattern : commandRegExCacher.getRegExPattrenCache()) {
matcher = pattern.matcher(inputString);
System.out.println(inputString);
System.out.println("Matching String"+matcher);
LOGGER.info("Mathcing pattern" +matcher);
if (matcher != null && matcher.find()) {
LOGGER.debug("Input String matched ");
break;
} else {
matcher = null;
}
}
commandRegExCacher.getRegExPattrenCache()是我为所有必需命令构建模式的地图
pattern= (?i)(^\s?)(Watch\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$
pattern= (?i)(^\s?)(Watch Channel\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$
pattern= (?i)(^\s?)(Tune\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$
pattern= (?i)(^\s?)(Tune To\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$
pattern=(?i)(^\s?)(goto\b\s?)([a-zA-Z0-9\u0590-\u05fe-\/\\^$*+?.()|\[{}'"\s]+)$
pattern=(?i)(^\s?)(pi\b\s?)([a-zA-Z0-9\u0590-\u05fe-\/\\^$*+?.()|\[\{}'"\s]+)$
因此,在所需命令上创建了很多模式。 当用户输入字符串时,我正在遍历模式图并检查是否存在,当搜索观看频道时,如果找到观看模式,则条件为真,它返回唯一的监视模式。
pattern =(?i)(^ \ s?)(Watch \ b \ s?)([a-zA-Z0-9 / \ ^ $ * + ?.()| [] {}&#39 ;" \ S] +)$
所以正在发生的事情是将手表作为关键并且通道开始运动作为价值
所以任何指针都要处理这个问题。
答案 0 :(得分:0)
Tune To,Watch Channel命令无法正常工作,因为当首先迭代Tune Pattern时,它与模式列表匹配,因此它首先使用Tune模式验证并返回相同的内容,所以我已通过Take LinkedHsMap和我插入了更长的键。 这样,具有最大长度的String首先迭代。