2010-08-12 2 views
9

Следующий код сортирует работы, но фиксирует количество элементов в String []. Есть ли способ сделать String [] добавить число элементов, необходимых динамически?Как лучше всего преобразовать StringBuilder в 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; 
} 
+0

Это действительно поможет, если вы объясните *, как вы хотите, чтобы текст был разбит. Я сделал предположения на основе кода, но описание было бы неплохо. –

ответ

20

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

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

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

+6

Мой ответ обречен! Великий @JonSkeet ответил за три секунды до этого. :-) Прочтите свою книгу Jon. Это потрясающе. –

+2

Отлично! Только нужна эта одна строка. И да, TAB is \ t. Бесконечно благодарен. – jacknad

2

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

4

Чтобы динамически увеличивать массив, используйте 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, как предложено другими

+0

Спасибо, миллион! Большая помощь. – jacknad

1

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

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

Непрактичный. Если вход StringBuilder достаточно велик, вы переполните стек. –

-4
StringBuilder t= new StringBuilder(); 

String s= t.toString(); 
0

Строка MyLocation = builder.toString();

Смежные вопросы