我正在构建一个表示多项式的字符串。我试图用""替换所有^ 1和x ^ 0使用replaceAll方法简化输出。但是,当我运行代码时,它不会检测到任何目标字符串。
public String toString() {
String output = "";
boolean isFirst = true;
for(Node current = head; current != null; current = current.next) {
if(isFirst) {
output += current.coefficient + "x^" + current.exponent;
isFirst = false;
}
else if(current.coefficient < 0)
output += " - " + current.coefficient*-1 + "x^" + current.exponent;
else
output += " + " + current.coefficient + "x^" + current.exponent;
}
output.replaceAll("x^0", "");
output.replaceAll("^1", "");
return output;
}
答案 0 :(得分:3)
字符串是不可变的。你不能改变一个字符串。因此,replace
和replaceAll
方法返回一个新的String。试试这个:
output = output.replaceAll("x^0", "");
output = output.replaceAll("^1", "");
答案 1 :(得分:3)
因为字符串是不可变的,所以任何修改操作都会返回一个新字符串。因此,您必须保存并处理函数结果:
output = output.replace(...)
另外,请查看允许模式的明确规范:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
我想要提到的一点是,字符串开头的^
将模式锚定到字符串的开头。你不希望这样,所以逃避它:\^
。
无论如何,您真的想要移除对replaceAll
的来电:"x^1"
匹配"x^10"
的开头!只是在构建字符串时不要包含这些子字符串。
double f = current.coefficient;
if(isFirst)
isFirst = false;
else if(f < 0) {
f = -f;
output += " - ";
} else
output += " + ";
output += f;
if(current.exponent == 1)
output += "x";
else if(current.exponent != 0)
答案 2 :(得分:2)
字符串是不可变的。如果查看文档,您将看到修改String内容的每个方法都返回一个新方法。
因此,您需要将replaceAll
的结果分配回output
。
output = output.replaceAll("x^0", "");