我有以下代码(示例中已缩短):
while (reader.ready()) {
String line = reader.readLine();
Matcher responseCodeMatcher = responseCodePattern.matcher(line);
if (responseCodeMatcher.matches()) {
responseCode = Integer.parseInt(responseCodeMatcher.group(1));
continue;
}
Matcher cacheControlMatcher = cacheControlPattern.matcher(line);
if (cacheControlMatcher.matches()) {
cacheControl = CacheControl.parseString(responseCodeMatcher.group(1));
continue;
}
...
}
这些模式都是类的静态最终成员。 所以我有一堆模式,我想找出每一行是否与其中一个匹配,如果是的话 - 做一些事情(根据模式的不同而变化)。你能想出一种方法来很好地重构它吗?也许是我浏览过的模式集合(然后我如何知道如果它匹配该怎么办?)或其他一些想法。
最佳答案
因为到目前为止还没人回答,所以我会回答,尽管我不懂 Java。
在 C# 中,我将创建一个元组列表。元组的第 1 项是要检查的模式,第 2 项是匿名方法,其中包含要执行的模式特定代码。在 C# 中,它看起来像这样:
var patterns = new List<Tuple<Pattern, Action<Matcher>>>();
patterns.Add(Tuple.Create(responseCodePattern, matcher =>
{
responseCode = Integer.parseInt(matcher.group(1));
}));
patterns.Add(Tuple.Create(cacheControlPattern, matcher =>
{
cacheControl = CacheControl.parseString(matcher.group(1));
}));
while (reader.ready()) {
String line = reader.readLine();
foreach(var tuple in patterns)
{
Matcher matcher = tuple.Item1.matcher(line);
if(matcher.matches())
{
tuple.Item2(matcher);
break;
}
}
}
我不知道这对 Java 人员是否有意义,尤其是使用 lambda 语法...如果没有,请询问:-)
关于java - 重构模式匹配序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677573/