Java String.split () a veces da cadenas en blanco

Estoy haciendo un rodillo de dados basado en texto. Toma cadenas como "2d10 + 5" y devuelve una cadena como resultado del rollo (s). Mi problema está apareciendo en el tokenizador que divide la cadena en partes útiles para que las analice en información.

String[] tokens = message.split("(?=[dk\\+\\-])");

Esto está dando resultados extraños, inesperados. No sé exactamente qué los está causando. Podría ser la expresión regular, mi malentendido o Java simplemente siendo Java. Esto es lo que está pasando:

3d6+4 produce la cadena de cadenas[3, d6, +4]. Esto es correcto.d% produce la cadena de cadenas[d%]. Esto es correcto.d20 produce la cadena de cadenas[d20]. Esto es correcto.d%+3 produce la cadena de cadenas[, d%, +3]. Esto es incorrecto.d20+2 produce la cadena de cadenas[, d20, +2]. Esto es incorrecto.

En el cuarto y quinto ejemplo, algo extraño hace que aparezca una cadena extra vacía en la parte frontal de la matriz. No es la falta de número en el frente de la cadena, como lo demuestran otros ejemplos. No es la presencia del signo de porcentaje, ni el signo más.

Por ahora solo continúo a través del bucle for en cadenas en blanco, pero eso se siente como una solución de curita. ¿Alguien tiene alguna idea de qué causa la cadena en blanco en la parte frontal de la matriz? ¿Cómo puedo arreglarlo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta