Java String.replace() - 替换的不仅仅是我指定的子字符串?

时间:2015-04-01 12:39:50

标签: java string replace startswith ends-with

根据this CodingBat problem我正在尝试执行以下操作:

  

给定一个字符串,如果第一个或最后一个字符为'x',则返回不带'x'字符的字符串,否则返回字符串不变。

我的代码:

public String withoutX(String str) {
    if (str.startsWith("x")) {
        str = str.replace(str.substring(0, 1), "");
    }
    if (str.endsWith("x")) {
        str = str.replace(str.substring(str.length()-1), "");
    }
    return str;
}

此代码替换字符串中的所有x个字符,而不是仅替换第一个和最后一个字符。为什么会发生这种情况,以及解决问题的好方法是什么?

3 个答案:

答案 0 :(得分:4)

您可以使用string.replaceAll功能。

string.replaceAll("^x|x$", "");

以上代码将替换开头或结尾处的x。如果在开头或结尾没有x,它将返回原始字符串不变。

答案 1 :(得分:1)

来自replace方法的sdk:

  

返回替换所有出现次数所产生的新字符串   带有newChar的字符串中的oldChar。

您无需替换即可解决此问题:

public String withoutX(String str) {   
    if (str == null) { 
        return null;
    }

    if (str.startsWith("x")) {
        str = str.substring(1);
    }
    if (str.endsWith("x")) {
        str = str.substring(0, str.length()-1);
    }

    return str;
}

答案 2 :(得分:-1)

您可以将replaceFirst用作第一个字符,或者您可以将两个字符串子字符串

public static String withoutX(String str) {
        if (str.startsWith("x")) {
            str = str.replaceFirst("x", "");
        }
        if (str.endsWith("x")) {
            str = str.substring(0,str.length() - 1);
        }

        return str;
    }