The following code sort of works, but fixes the number of elements in String[]. Is there a way to make a String[] add the number of elements needed dynamically?
private static StringBuilder names = new StringBuilder();
...
public String[] getNames() {
int start = 0;
int end = 0;
int i = 0;
String[] nameArray = {"","","",""};
while (-1 != end) {
end = names.indexOf(TAB, start);
nameArray[i++] = names.substring(start, end);
start = ++end; // The next name is after the TAB
}
return nameArray;
}
So you're just trying to split on tab? How about:
return names.toString().split(TAB);
Note that split
takes a regular expression pattern - so don't expect split(".")
to split just on dots, for example :)
To dynamically grow array, use ArrayList<String>
, you can even convert the result to String[]
if that's what your API requires.
ArrayList<String> namesList = new ArrayList<String>( );
while (-1 != end) {
end = names.indexOf(TAB, start);
namesList.add( names.substring(start, end) );
start = ++end; // The next name is after the TAB
}
return namesList.toArray( new String[ namesList.size( ) ] );
That said, for your purposes use split
as suggested by others
You can use String's method split
to do that in one line.
You can use a recursive implementation to use the program stack as a temporary array.
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;
}
String myLocation = builder.toString();
StringBuilder t= new StringBuilder();
String s= t.toString();