java - 模式的字符串匹配
问题描述
我有 2 串模式a.{var1}.{var2}
和b.{var1}.{var2}
.
如果var1
第一个字符串与var1
第二个字符串相同,并且var2
第一个字符串与第二个字符串相同,则两个字符串匹配var2
。
变量可以是任何顺序,例如a.{var1}.{var2}
和b.{var2}.{var1}
。
如何有效地匹配两个字符串?
示例 1:
String pattern1 = "1.{var1}";
String pattern2 = "2.{var1}";
//Match True = (1.111,2.111)
//Match False = (1.121,2.111)
示例 2:
String pattern1 = "1.{var1}.{var2}";
String pattern2 = "2.{var1}.{var2}";
//Match True = (1.11.22,2.11.22)
//Match False = (1.11.22,2.111.22)
示例 3:
String pattern1 = "1.{var1}.{var2}";
String pattern2 = "2.{var2}.{var1}";
//Match True = (1.22.11,2.11.22)
//Match False = (1.11.22,2.111.22)
那么匹配这两个字符串的最佳方法是什么?
我想匹配这两个字符串以查找它们是否与提到的模式相关。
将此问题扩展到字符串集合,即集合 A 字符串必须与集合 B 中的字符串匹配。最后必须形成满足该匹配算法的字符串对。匹配 Set A 到 Set B 中的所有字符串时,模式将保持不变。
解决方案
这可能不是最有效的方法,但它确实为您提供了预期的输出。
01/05:在 Ole 在评论中指出错误后更新代码:
private boolean compareStr(String a, String b) {
ArrayList<String> aList = new
ArrayList<String>(Arrays.asList(a.split("\\.")));
ArrayList<String> bList = new ArrayList<String>(Arrays.asList(b.split("\\.")));
bList.remove(0);
aList.remove(0);
if(aList.size() != bList.size())
return false;
boolean aMatchFlag = false;
for(int i=0; i< aList.size(); i++){
if (!bList.contains(aList.get(i))) {
return false;
}
}
aMatchFlag = true;
System.out.println("All elements of A are present in B");
boolean bMatchFlag = false;
for(int i=0; i< bList.size(); i++){
if (!aList.contains(bList.get(i))) {
return false;
}
}
bMatchFlag = true;
System.out.println("All elements of B are present in A");
if(aMatchFlag && bMatchFlag)
return true;
else
return false;
}
对于那些也在寻找代码性能的人
Input:1.11.11, 2.11.11.11
Compilation time: 1.45 sec, absolute running time: 0.24 sec, cpu time: 0.26 sec, memory peak: 18 Mb, absolute service time: 1,7 sec
Input:1.11.11, 2.11.22
Compilation time: 1.25 sec, absolute running time: 0.24 sec, cpu time: 0.23 sec, memory peak: 18 Mb, absolute service time: 1,49 sec
Input:1.11.2, 2.11.22
Compilation time: 1.34 sec, absolute running time: 0.24 sec, cpu time: 0.24 sec, memory peak: 18 Mb, absolute service time: 1,58 sec
Input:1.11.2, 2.11.111
Compilation time: 1.65 sec, absolute running time: 0.28 sec, cpu time: 0.32 sec, memory peak: 18 Mb, absolute service time: 1,94 sec
推荐阅读
- css - Blockquote 样式打破了左浮动 div?
- php - 从独白中排除 404
- javascript - Promise All 语法和可接受操作的框架
- kubectl - Kubernetes、Rook 和 Ceph:CephFS 无法正常工作
- sql - SQL Group by Date 根据数字分成多列
- google-vision - 谷歌视觉标志检测
- dependency-injection - How do I get a serilog enricher to work with dependency injection while keeping it on startup?
- google-play - Google Play store: Discount for in app purchases
- kubernetes - 没有为 AdmissionController 中的 env 条目获取 ConfigMapKeyRef
- python - 使用 java 和 python 运行 docker 镜像