java - 部分字符串匹配

标签 java string

我正在比较两个不同 map 的两个值并寻找完全匹配和部分匹配。我正在使用 val1.contains(val2) 检查部分匹配,但得到 false。我匹配的字符串示例是:

val1: Kansas City Athletics  
val2: Athletics

为什么 contains() 方法在这种情况下不起作用?

编辑

如果我的值(value)观互换了,这应该仍然有效吗?例如。如果

val1: Kansas City Athletics

val2: Athletics

这是我的代码:我正在迭代两个映射的值并比较值以获得完全匹配和部分匹配。

List<Integer> compareResults = new ArrayList<Integer>();
int i_index = 0;
for (Entry<String, Vector<String>> entry : annotationMap.entrySet()) {///String key: annotationMap.keySet()){
  for (Entry<String, Vector<String>> rageEntry : rageMap.entrySet()) {
   if (entry.getKey().equals("ORGANIZATION")) {
    for (String val : entry.getValue()) {
        recusion:
        for (int i = i_index; i <= rageEntry.getValue().size(); ) {
            String rageVal = rageEntry.getValue().elementAt(i);
            if (val.equals(rageVal)) {
                orgTruePositiveCount++;
                i_index++;
                break recusion;
            } else if (val.contains(rageVal)) {  //|| dataB.get(entryA.getKey()).contains(entryA
                // .getValue())){
                orgTruePositiveCount++;
                i_index++;
                break recusion;
            } else if (!val.contains(rageVal)) {
                orgFalseNegativeCount++;
                i_index++;
                break recusion;
            } else if (!rageVal.contains(val)) {
                orgFalsePositiveCount++;
                i_index++;
                break recusion;
            }

        }
    }
}

if (entry.getKey().equals("PERSON")) {
    for (String val : entry.getValue()) {
        recusion:
        for (int i = i_index; i <= rageEntry.getValue().size(); ) {
            String rageVal = rageEntry.getValue().elementAt(i);

            if (val.equals(rageVal)) {
                perTruePositiveCount++;
                i_index++;
                break recusion;
            } else if (val.contains(rageVal)) {
                perTruePositiveCount++;
                i_index++;
                break recusion;
            } else if (!val.contains(rageVal)) {
                perFalseNegativeCount++;
                i_index++;
                break recusion;
            } else if (!rageVal.contains(val)) {
                perFalsePositiveCount++;
                i_index++;
                break recusion;
            }
        }
    }
}

最佳答案

它似乎确实适用于您描述的情况 - 请参阅这个简单的示例:

public class ContainsExample {
  public static void main(final String[] args) {
    final String val1 = "Kansas City Athletics";
    final String val2 = "Athletics";
    System.out.println(val1.contains(val2));
    System.out.println(val2.contains(val1));
  }
}

运行此命令会产生:

$ java ContainsExample
true
false

关于java - 部分字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162532/

相关文章:

java - 无法从 String 转换为 float

java - 使用 JSON 和 PHP 从 Mysql DB 获取数据时出错

java - Eclipse:在类路径上查找资源

安装jre后Java崩溃

java - 令人困惑的 Java 多态性

java - 将 textView 转换为 Boolean 以避免类型 Intent 中的 : The method putExtra(String, boolean) 不适用于参数

python - 在 python 字符串替换中使用星号字符 (*) 作为 clown ?

java - textPersonName 和 textPassword 之间的比较

java - 哈希仅返回 8 或 9 个字符

c - 如何将C程序代码转换成char[]?