Вы можете использовать рекурсивную реализацию, чтобы использовать программный стек как временный массив.
public String[] getNames()
{
return getNamesRecursively( names, 0, TAB, 0 );
}
private static String[] getNamesRecursively( StringBuilder str, int pos, String delimiter, int cnt )
{
int end = str.indexOf( delimiter, pos );
String[] res;
if( end >= 0 )
res = getNamesRecursively( str, end + delimiter.length(), delimiter, cnt + 1 );
else
{
res = new String[ cnt + 1 ];
end = str.length();
}
res[ cnt ] = str.substring( pos, end );
return res;
}