Cifra de Bacon

Estou com um problema, meu professor pediu para eu fazer a cifra de bacon, e o maior problema é como vou colocar o espaço no resultado, ele aparece todo junto no final e eu queria que aparece como a pessoa digitou segue o código a baixo:

binario[0] = “00001”; binario[1] = “00010”;binario[2] = “00011”; binario[3] = “00100”;
binario[4] = “00101”; binario[5] = “00110”; binario[6] = “00111”;binario[7] = “01000”;
binario[8] = “01001”;binario[9] = “01010”;binario[10] = “01011”;binario[11] = “01100”;
binario[12] = “01101”;binario[13] = “01110”;binario[14] = “01111”; binario[15] = “10000”;
binario[16] = “10001”;binario[17] = “10010”; binario[18] = “10011”;binario[19] = “10100”;
binario[20] = “10101”;binario[21] = “10110”;binario[22] = “10111”;binario[23] = “11000”;
binario[24] = “11001”;binario[25] = “11010”;

    binario2[0] = "a"; binario2[1] = "b";binario2[2] = "c"; binario2[3] = "d";
    binario2[4] = "e"; binario2[5] = "f"; binario2[6] = "g";binario2[7] = "h";
    binario2[8] = "i";binario2[9] = "j";binario2[10] = "k";binario2[11] = "l";
    binario2[12] = "m";binario2[13] = "n";binario2[14] = "o"; binario2[15] = "p";
    binario2[16] = "q";binario2[17] = "r"; binario2[18] = "s";binario2[19] = "t";
    binario2[20] = "u";binario2[21] = "v";binario2[22] = "w";binario2[23] = "x";
    binario2[24] = "y";binario2[25] = "z";

    String v = "";
    String w = "";
    String x = txt_1.getText().replaceAll(" ", "");
    String y = txt_2.getText();

    String[] texto1 = new String[x.length()];
    String[] texto2 = new String[x.length()*5];
    String[] texto3 = new String[x.length()*5];

    if((x.length()*5) > y.length())
    {
        int z = (x.length()*5)-y.length();
        JOptionPane.showMessageDialog(null, "Ainda falta " + z + " letras para funcionar");
    }

    for (int i = 0; i < x.length(); i++)
    {
        texto1[i] = x.substring(i,i+1).toLowerCase();
    }

    for (int i = 0; i < texto1.length; i++)
    {
        for (int j = 0; j < binario2.length; j++)
        {
            if(texto1[i].equals(binario2[j]))
            {
                w = w.concat(binario[j]);
            }
        }
    }

    for (int i = 0; i < x.length()*5; i++)
    {
        texto2[i] = y.substring(i,i+1);
        texto3[i] = w.substring(i,i+1);
        
        if(texto3[i].equals("0"))
        {
            texto2[i] = texto2[i].toLowerCase();
        }
        else
        {
            texto2[i] = texto2[i].toUpperCase();
        }
        v = v.concat(texto2[i]);
    }

    txt_3.setText(""+w);
    txt_4.setText(""+v);
    
    
    
    //--------------------------------------DECODIFICAÇÃO--------------------------------------
    
    int numero1 = 0,numero2 = 0;
    numero1 = (txt_1.getText().length()*5)/4;        
   
    String a = "";
    String b = "";
    String[] numero = new String[numero1];
   
    for (int i = 0; i < w.length()/5; i++)
    {
        a = w.substring(numero2,numero2+5);
        numero2 += 5;
        for (int j = 0; j < binario.length; j++)
        {
            if(a.equals(binario[j]))
            {
                b = b.concat(binario2[j]);
            }
        }
    }
    txt_5.setText(b);

Uma possibilidade é criar uma matriz com o tamanho igual ao total de palavras inseridas. Cada posição da matriz armazena o total de caracteres da palavra que lhe é correspondente.
Então, após processar a cifra, você quebra-a, inserindo espaços de acordo com a posição original da palavra.