your example
String va='300430[.][.]testcompany crm[.][.][.][.][.][.]';
splits into
[ "300430", "", "testcompany crm" ]
what happens is, that if salesforce hits trailing "pure" delimiters, they (somehow) got lost. I mean if you have just delimiters without anything between them at all and that in the end, then the will be ignored. No idea why this happens - could be a bug.
other example
String va='[.][.][.][.]300430[.][.][.]2[.]testcompany crm[.]56[.]45[.][.][.][.]45[.]55[.][.]';
splits into
[ "", "", "", "", "300430", "", "", "2", "testcompany crm", "56", "45", "", "", "", "45", "55" ]
you see: in the front it works and in the end, it does not.
to make it better, you could try to add a constant suffix and delete the last element of the list
String va='[.][.][.][.]123[.][.][.]2[.]test[.][.][.]' + '[.]foobar';
note that i added [.]foobar
you get
[ "", "", "", "", "123", "", "", "2", "test", "", "", "", "foobar" ]
if you now
li.remove( li.size()-1 );
you will get what you really want i think
[ "", "", "", "", "123", "", "", "2", "test", "", "", "" ]