2010-08-12 13 views
9

El siguiente código funciona, pero arregla el número de elementos en String []. ¿Hay alguna manera de hacer que un String [] agregue la cantidad de elementos necesarios dinámicamente?¿Cómo se puede convertir un StringBuilder a 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

Sería de gran ayuda si explicas * cómo * quieres que se rompa el texto. He hecho suposiciones basadas en el código, pero una descripción hubiera sido agradable. –

Respuesta

20

¿Estás tratando de dividir en la pestaña? ¿Qué tal:

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

Tenga en cuenta que split tiene un patrón de expresión regular - así que no esperes split(".") dividir sólo en puntos, por ejemplo :)

+6

¡Mi respuesta está condenada! Great @JonSkeet respondió tres segundos antes que yo. :-) Lee tu libro Jon. Es impresionante. –

+2

¡Perfecto! Solo necesitaba esta línea. Y sí, TAB es \ t. Un millón de gracias. – jacknad

2

Puede utilizar el método de split cadena de hacerlo en una línea.

4

Para aumentar dinámicamente la matriz, use ArrayList<String>, incluso puede convertir el resultado a String[] si eso es lo que su API requiere.

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

Dicho esto, para sus fines utilizan split según lo sugerido por otros

+0

¡Gracias a un millón! Gran ayuda – jacknad

1

Se puede utilizar una implementación recursiva a utilizar la pila del programa como una matriz temporal.

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

Impractical. Si la entrada StringBuilder es lo suficientemente grande, se desbordará la pila. –

-4
StringBuilder t= new StringBuilder(); 

String s= t.toString(); 
0

cadena MyLocation = builder.toString();

Cuestiones relacionadas