Как лучше всего преобразовать StringBuilder в String []? - PullRequest
9 голосов
/ 13 августа 2010

Следующий код вроде работает, но фиксирует количество элементов в String []. Есть ли способ заставить String [] добавить количество элементов, необходимых динамически?

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;
}

Ответы [ 6 ]

21 голосов
/ 13 августа 2010

Так вы просто пытаетесь разделить на вкладке?Как насчет:

return names.toString().split(TAB);

Обратите внимание, что split принимает шаблон регулярного выражения - поэтому не ожидайте, что split(".") разделится только на точки, например:)

4 голосов
/ 13 августа 2010

Чтобы динамически увеличивать массив, используйте ArrayList<String>, вы даже можете преобразовать результат в String[], если этого требует ваш API.

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( ) ] );

Тем не менее, для ваших целей используйте split, как предлагают другие

2 голосов
/ 13 августа 2010

Вы можете использовать метод String split, чтобы сделать это в одной строке.

1 голос
/ 13 августа 2010

Вы можете использовать рекурсивную реализацию, чтобы использовать программный стек как временный массив.

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;
}
0 голосов
/ 06 апреля 2017

String myLocation = builder.toString ();

0 голосов
/ 16 сентября 2013
StringBuilder t= new StringBuilder();

String s= t.toString();
...