Вы можете просто сделать:
if (str.replace("^%", "").isEmpty()) {
…
}
Метод replace
заменяет строку как можно чаще, поэтому он соответствует именно тому, что вам нужно.
Также соответствует пустой строке, которая, согласно спецификации, «не содержит ничего, кроме этого шаблона». В подобных случаях вы всегда должны спрашивать, подразумевается ли также пустая строка.