Java 使用通配符验证参考文件的算法
我有一个如下的文件,我想验证它的正确性。该文件用作处理某些数据的参考文件。我将输入数据与该文件的ColA、ColB和ColC进行匹配,并从顶部返回第一个匹配的OutA。通配符“*”匹配任何内容。例如,如果我的输入数据有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
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)行比较,这还不错。我试试这个。