Java的String.replaceAll无法正常工作

时间:2014-04-22 22:45:35

标签: java string

我正在构建一个表示多项式的字符串。我试图用""替换所有^ 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;
    }

3 个答案:

答案 0 :(得分:3)

字符串是不可变的。你不能改变一个字符串。因此,replacereplaceAll方法返回一个新的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", "");
相关问题