我正在构建一个小型应用程序,可以自动转换Java中的布尔查询。

这是用于查找查询字符串是否包含某个单词的代码,如果包含,则将其替换为转换后的值。

int howmanytimes = originalValues.size();

for (int y = 0; y < howmanytimes; y++) {
    String originalWord = originalValues.get(y);
    System.out.println("original Word = " + originalWord);

    if (toReplace.contains(" " + originalWord.toLowerCase() + " ")
         || toCheck.contains('"' + originalWord.toLowerCase() + '"')) {
        toReplace = toReplace.replace(originalWord, translatedValues.get(y).toLowerCase());
        System.out.println("replaced " + originalWord + " with " + translatedValues.get(y).toLowerCase());
    }

    System.out.println("to Replace inside loop " + toReplace);
}


问题是当查询具有例如“((mykeyword OR“ blue mykeyword”)“并且翻译后的值不同时,例如,mykeyword转换为elpalavra,而“ blue mykeyword”转换为“ elpalavra azul”。在这种情况下,结果字符串应为'(elpalavra或“ elpalavra azul”)'时,结果字符串将为'(elpalavra或“ blue elpalavra”)'。我了解到,在第一个循环中它将替换所有关键字,而在第二个循环中将不再包含翻译时应使用的原始值。
我怎样才能解决这个问题?

谢谢

最佳答案

您可以按大小desc对原始值进行排序。然后遍历它们。
这样,您首先要替换“ blue mykeyword”,并且只有在替换“ mykeyword”之后

10-06 09:56