2011-09-24 54 views
5

Estoy analizando contenido usando el siguiente código con jsoup.¿Quitar corchetes [] de una lista establecida en una vista de texto?

try{ 
Elements divElements = jsDoc.getElementsByTag("div"); 
for(Element divElement : divElements){ 
    if(divElement.attr("class").equals("article-content")){ 
     textList.add(divElement.text()); 
     text = textList.toString(); 
    } 
} 
} 
catch(Exception e){ 

System.out.println("Couldnt get content"); 
     } 

El único problema es que el contenido se devuelve entre corchetes [] así.

Supongo que es debido a la lista que estoy estableciendo. ¿Cómo puedo eliminar esto?

Respuesta

19

Reemplazar:

text = textList.toString(); 

con:

text = textList.toString().replace("[", "").replace("]", ""); 
+0

no va a funcionar si hay soportes en los contenidos reales de la lista de texto – Sapience

1

Sí, es debido a la Lista. Usted tiene dos opciones:
Subclase cualquier lista de texto es, y anular toString() o

String temp = textList.toString(); 
text = temp.subString(1, temp.size() -2); 
0

implementar su propio método para crear el String necesaria utilizando iteración y StringBuffer. No es una buena práctica para replace paréntesis o substring tal salida.

1

Para la mayoría de los objetos, el método toString() no está destinado a la visualización, sino a la depuración. Esto se debe a que el método toString() generalmente no tiene un formato específico y puede variar según la clase particular utilizada. Por ejemplo, LinkedList y ArrayList podrían devolver valores diferentes desde toString(). Es poco probable, pero es algo en lo que debes evitar confiar. Por supuesto, si el objeto representa el texto real (String, StringBuilder, CharSequence), lo anterior no se aplica.

Además, está creando y asignando la cadena varias veces en el ciclo for. En cambio, solo debe crear la cadena después de que se haya completado el ciclo for.

Para crear la cadena puede hacerla suya o utilizar una biblioteca como Apache commons lang, que tiene un método de utilidad StringUtils.join().

Si sacas su cuenta, podría ser algo como esto:

Elements divElements = jsDoc.getElementsByTag("div"); 
Iterator<Element> iterator = divElements.iterator(); 
StringBuilder builder = new StringBuilder(); 

while (iterator.hasNext()){ 
    Element divElement = iterator.next() 
    if (divElement.attr("class").equals("article-content")){ 
     builder.append(divElement.text()); 
     if (iterator.hasNext()) { 
     builder.append(", "); 
     } 
    } 
} 
text = builder.toString(); 
0

Es posible reemplazar el método toString().

ejemplo Set:

class SetPrinter<E> extends HashSet<E> { 

    public SetPrinter(Set<E> set) { 
     super(set); 
    } 

    @Override 
    public String toString() { 

     Iterator<E> i = iterator(); 
     if (!i.hasNext()) { 
      return ""; 
     } 

     StringBuilder sb = new StringBuilder(); 

     for (; ;) { 
      E e = i.next(); 
      sb.append(e == this ? "(this Collection)" : e); 
      if (!i.hasNext()) 
       return sb.toString(); 
      sb.append(","); 
     } 
    } 
} 

Uso:

nueva SetPrinter (SetToPrint) .toString();

2

Al utilizar regex para reemplazar los corchetes inicial y posterior, String.replace() no funciona para los casos extremos en los que el contenido de la lista contiene corchetes.

String text = textList.toString().replaceAll("(^\\[|\\]$)", ""); 
+0

RESPUESTA CORRECTA de verdad! – blueSky

Cuestiones relacionadas