gpt4 book ai didi

java - 如何自动比较两个句子并替换一个句子中出现但另一个句子中不出现的任何值?

转载 作者:行者123 更新时间:2023-12-01 16:39:12 26 4
gpt4 key购买 nike

我正在开发一个java项目,该项目比较两个句子并执行以下操作:

第一句话是:h = A(?X,?X3,?X32)第二句话是:b = B(?X), C(?Y,?X32), W(?X3256)

我希望程序比较两个句子,如果 h 中存在任何参数,但 b 中不存在,则更改 ?到 !仅针对此参数且仅在 h 句子中,因此上面的 h 句子应变为:第一句变成:h = A(?X,!X3,?X32)

我尝试使用这个:

if(h.contains("?X3") && !(b.contains("?X3"))) {
h=h.replaceAll("\\?X3","!X3");
}

但这将取代 ?X3 和 ?X32。它产生这样的结果: h = A(?X,!X3,!X32),这是错误的,因为 b 中存在 X32。

另外,我想做一个通用方法来替换 h 中出现但 b 中不出现的任何参数,因为参数可以是任何值(字母或数字)。

知道如何做到这一点吗?

最佳答案

由于您需要检测以 "?" 开头的句子中的一些字母数字“参数”,因此您可能需要实现一些辅助方法来将句子拆分为这些特定参数,然后检查是否存在某些参数第二句中不包含参数。

例如:

// helper split
private static List<String> split(String s) {
List<String> result = new ArrayList<>();

int start = 0;
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '?') {
result.add(s.substring(start, i));
start = i++;
while (i < s.length()) {
c = s.charAt(i);
if (!Character.isLetterOrDigit(c)) {
result.add(s.substring(start, i));
start = i;
break;
} else {
i++;
}
}
}
}
result.add(s.substring(start, s.length()));

// result.forEach(System.out::println); // debug print
return result;
}

然后可以进行如下测试:

String h = "A(?X,?X3,?X32)";
String b = "B(?X), C(?Y,?X32), W(?X3256)";

List<String> argsH = split(h);
List<String> argsB = split(b);

for (int i = 0; i < argsH.size(); i++) {
String arg = argsH.get(i);
if (arg.startsWith("?") && !argsB.contains(arg)) {
argsH.set(i, "!" + arg.substring(1));
}
}
h = String.join("", argsH);
System.out.println("Updated: " + h);

// output
Updated: A(?X,!X3,?X32)

关于java - 如何自动比较两个句子并替换一个句子中出现但另一个句子中不出现的任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61898654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com