Java 使用通配符验证参考文件的算法

Java 使用通配符验证参考文件的算法,java,algorithm,Java,Algorithm,我有一个如下的文件,我想验证它的正确性。该文件用作处理某些数据的参考文件。我将输入数据与该文件的ColA、ColB和ColC进行匹配,并从顶部返回第一个匹配的OutA。通配符“*”匹配任何内容。例如,如果我的输入数据有X4 Y2 Z3,它将从文件返回13 Seq ColA ColB ColC OutA 1 X1 Y1 Z1 10 2 X2 Y2 * 11 3 X3 * Z2 12 4 * Y2

我有一个如下的文件,我想验证它的正确性。该文件用作处理某些数据的参考文件。我将输入数据与该文件的ColA、ColB和ColC进行匹配,并从顶部返回第一个匹配的OutA。通配符“*”匹配任何内容。例如,如果我的输入数据有
X4 Y2 Z3
,它将从文件返回13

Seq  ColA  ColB  ColC  OutA
1    X1    Y1    Z1    10
2    X2    Y2    *     11
3    X3    *     Z2    12
4    *     Y2    Z3    13
5    *     *     Z4    14
6    *     Y3    Z4    15
7    *     *     *     16
现在,该文件可以包含一些从未使用或无法访问的条目。例如,如果我收到
X9 Y3 Z4
作为我的输入,它将与第5行匹配,并且不会查看第6行,尽管第6行也与我的输入匹配。如果我们交换第5行和第6行的位置,它将按预期工作。我希望在实际进程运行之前找到这些无法访问的记录


关于如何在文件中查找此类条目的任何想法。我正在寻找一种算法。注意,在这个示例中,我减少了列和行的数量。实际文件大约有10列50行。

我将采用大多数web服务器用于将请求URL与控制器匹配的方法。他们采用的正是最适合资源url的控制器

/users
/users/{userId}
如果您看到像
/users/2
这样的请求,您当然会更喜欢第二个资源控制器

现在回到您的问题,varibale部件(您希望最匹配)与
*
的使用有关。如果要获得最佳匹配,必须对所有条目进行排序,即顶部
*
数量最少的条目,底部数量最多的条目。(因为您从上到下迭代,并在第一次匹配时返回。)

但是,对于所有具有相同数量的
*
的条目,可能存在多个拟合行,并且无法防止这种情况发生。你必须决定哪一个被拿走

一个简单的例子说明了这一点:

Seq  ColA  ColB  ColC  OutA
20   X3    *     Z3    12
21   *     Y2    Z3    13
您如何处理X3、Y2和Z3?输出不清楚,将取决于排序顺序。我的adwise:使用a使输出可预测

对于实现,只需创建一个自定义比较器来计算使用的
*

快速查看一下
List#sort
还可以发现,已经使用了一种稳定的排序算法,因此您不必担心它。()

此实现是一种稳定、自适应、迭代的mergesort[…]


假设通配符匹配每个字符串(具体地说,对于每个列,存在一个不以文本形式出现的有效符号),检查每对行就足以确定第一行是否匹配第二行匹配的超集。如果且仅当对于每一列,第二行有一个文本,然后第一行有相同的文本或通配符,并且第二行有一个通配符,那么第一行有一个通配符时,才会出现这种情况。

。稳定排序看起来很有希望。但由于该文件是由我们的最终用户维护的,我宁愿提醒他们错误的排序顺序,而不是自己排序。我想我的问题可以通过简单地计算
*
的数量来实现,并找出它在哪一行减少了。再想想,这是行不通的。如果我有两个这样的条目
X4**/x5y5*
。它们完全有效。谢谢大卫。所以对于我的50行文件,我必须进行(49+48+…+3+2+1)行比较,这还不错。我试试这个。