First, is this part correct?
} else if (str.length() == 1 && str.charAt(0) == 'a') {
return str;
} else {
return str;
}
This will return a string of length 1, unchanged, regardless of the character. What should happen if you pass "z"? Since the first character is not 'a', should it be removed?
I suspect it was supposed to be something like this:
} else if (str.length() == 1 && str.charAt(0) != 'a') {
return "";
} else {
return str;
}
The rest of this answer assumes it should remove the character
You could use a StringBuilder
and delete the characters as necessary:
public String deFront(String str) {
StringBuilder sb = new StringBuilder(str);
if (sb.length() > 1 && sb.charAt(1) != 'b') {
sb.deleteCharAt(1);
}
if (sb.length() > 0 && sb.charAt(0) != 'a') {
sb.deleteCharAt(0);
}
return sb.toString();
}
Or you could use a regular expression search & replace:
public String deFront(String str) {
str = str.replaceFirst("^(.)[^b]", "$1");
str = str.replaceFirst("^[^a]", "");
return str;
}
Note: The order of deletion is important in both of these solutions. The b
is deleted first to prevent the deletion of a
from shifting the b
by one position.