简体   繁体   中英

Java String.replace() - replaces more than just the substring I specify?

As per this CodingBat problem I am trying to do the following:

Given a string, if the first or last chars are 'x', return the string without those 'x' chars, and otherwise return the string unchanged.

My code:

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;
}

This code replaces ALL the x characters in the string, rather than just the first and last. Why does this happen, and what would be a good way to solve it?

You could use string.replaceAll function.

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

The above code will replace the x which was at the start or at the end. If there is no x at the start or at the end, it would return the original string unchanged.

From the sdk for the replace method:

Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.

You can solve this without replace:

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;
}

You can use replaceFirst for first character or you can substring both side by 1 character

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;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM