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