gpt4 book ai didi

java - 在字符串中将负数替换为正数,反之亦然

转载 作者:太空宇宙 更新时间:2023-11-04 13:13:57 24 4
gpt4 key购买 nike

假设我有一个方程的字符串表示,例如 -

(1 -2 3) v (-1 3 2) v (-5 1 4) v (-4 -2 -3) v (-3 4 5) v (1 -2 5) v (3 -2 5) v (2 3 -4)

我有一个方法,它接受要修改的字符串、要替换的数字变量及其应设置的状态

public String changedString(String original, int num, boolean state) {

}

调用时为

changedString(original, 2, false);

应返回以下字符串

(1 2 3) v (-1 3 -2) v (-5 1 4) v (-4 2 -3) v (-3 4 5) v (1 2 5) v (3 2 5) v (-2 3 -4)

请注意,2 的所有否定实例(负 2)已更改为正实例,而 2 的正实例(正 2)已更改为负实例。

为了解决这个问题,我最初尝试了String.replaceAll(),但这显然行不通。我尝试过的另一种方法是 -

public String changedString (String original,int num, boolean state){
String temp = original;
if (!state) {
StringBuilder sb = new StringBuilder(temp);
//Following code changes negative instances to positives
String from = "-" + num;
String to = "" + num;
int index = sb.indexOf("-" + num);
while (index != -1) {
sb.replace(index, index + from.length(), to);
index += to.length();
index = sb.indexOf(from, index);
}

//Following code changes positive instances to negatives
from = "" + num;
to = "-" + num;
index = sb.indexOf("-" + num);
while (index != -1) {
sb.replace(index, index + from.length(), to);
index += to.length();
index = sb.indexOf(from, index);
}
temp = sb.toString();
}
return temp;
}

但是,这种替代方法的另一个问题是它总是将任何给定的数字转换为负数。我怎样才能更轻松、更有效地做到这一点?

(这是我尝试 boolean 可满足性问题的方法中的一个元素)

最佳答案

您可以使用 String.replaceAll() 支持的正则表达式。问题是您必须使用临时字符来指示哪些数字首先切换状态:

public String changedString(String original, int num, boolean state)
{
String str = original.replaceAll("-" + num + "(?!\\d)", "#" + num);
str = str.replaceAll("(?<![#0-9])" + num + "(?!\\d)", "-" + num);
str = str.replaceAll("#" + num + "(?!\\d)", num);
return str;
}

这会将所有出现的 -num 替换为 #num,然后将所有出现的 num 替换为 -num,最后将 #num 替换为 num。第一步避免了使用 -num->num 删除负数,然后将所有出现的情况转换为 -num 的陷阱。

这些正则表达式使用环视来确保正确分隔数字而不捕获分隔符。您可以在此处阅读有关环视的更多信息:http://www.regular-expressions.info/lookaround.html并在此处查找 Java 语法:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#special .

关于java - 在字符串中将负数替换为正数,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705681/

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