I'm doing some beginner's coding practice and I ran into this problem:Given two strings, base and remove, return a version of the base string where all instances of the remove string have been removed. (not case sensitive).
This is what I have so far, but it's not working at all.
public String withoutString(String base, String remove) {
for (int i=0; i<base.length()-remove.length(); i++){
if (base.substring(i, i+remove.length()).equals(remove)){
base = base.substring(i, base.indexOf("remove")-1) + base.substring(base.indexOf("remove"), base.length()-remove.length());
}
}
return base;
}
I've yet to deal with the case sensitive part to make it more visible for myself. I'm also not sure why I can't use base.replaceAll("remove",""); Any help is appreciated.
EDIT*: I made a rookie mistake and the replaceAll still works. Additionally, how could I have done this using loops and conditionals? Would it have been messy like what I had previously?
You can use
String result = base.replaceAll(remove,"");
With quotes as you where trying it is actually trying to remove the string "remove".
To deal with the case insenstive you can use the regex flag for ignore case (?i) in the front so then you can call
String result = base.replaceAll("(?i)" + remove,"");
This does mean that the String remove, is now a regular expression now so special characters may have undesired results. For example if your remove string was ., you would end up with every character removed. If you don't want it as a regex then use
String result = Pattern.compile(remove, Pattern.LITERAL).matcher(base).replaceAll("")
Which can also include the case insensitive flag like so as they are a bitmask, see Pattern for more
Pattern.LITERAL | Pattern.CASE_INSENSITIVE
EDIT
To do it using your loop, just do this loop
for (int i=0; i <= base.length()-remove.length(); i++)
{
if (base.substring(i, i+remove.length()).equals(remove))
{
base = base.substring(0, i) + base.substring(i + remove.length() , base.length());
i--;
}
}
indexOf("remove") means, you are searching for the (fixed) STRING remove, not for the value of the String named remove - which is most likey not, what you want to do. Same applies for your replaceAll("remove") attempt.
remove the " so you are using the VALUE of the String named remove, not the fixed string "remove"
Example:
String remove = "test";
System.out.println(remove) // will print: test
System.out.println("remove") // will print: remove
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With