2011-09-24 12 views
5

Sto analizzando il contenuto utilizzando il seguente codice con jsoup.Rimuovi parentesi [] da un elenco impostato su un testo?

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

L'unico problema è il contenuto viene restituito con parentesi attorno ad esso [] così.

Suppongo che sia dovuto alla lista in cui lo sto impostando. Come posso rimuovere questi?

risposta

19

Sostituire:

text = textList.toString(); 

con:

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

non funzionerà se ci sono parentesi nel contenuto reale di lista testi – Sapience

1

Sì, la sua causa della lista. Bisogna Opzioni:
sottoclasse qualunque lista testi è, e ignorare toString() o

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

Implementare un proprio metodo per creare la String avete bisogno utilizzando iterazione e StringBuffer. Non è una buona pratica per parentesi replace o substring tale output.

1

Per la maggior parte degli oggetti, il metodo toString() non è destinato a essere utilizzato per la visualizzazione, ma in genere al debug. Questo perché il metodo toString() in genere non ha un formato specifico e potrebbe variare in base alla particolare classe utilizzata. Ad esempio, un LinkedList e ArrayList potrebbero restituire valori diversi da toString(). È improbabile, ma è qualcosa su cui dovresti evitare di fare affidamento. Naturalmente, se l'oggetto rappresenta il testo attuale (String, StringBuilder, CharSequence), quanto sopra non si applica.

Inoltre, si sta creando e assegnando la stringa più volte nel ciclo for. Invece, dovresti creare la stringa solo dopo aver completato il ciclo for.

Per creare la stringa è possibile eseguire il rollover o utilizzare una libreria come Apache commons lang, che ha un metodo di utilità StringUtils.join().

Se si tira il proprio, potrebbe essere simile a questa:

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

Si può sovrascrivere il metodo toString().

Set esempio:

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(","); 
     } 
    } 
} 

Usa:

nuovo SetPrinter (SetToPrint) .toString();

2

Utilizzando regex per sostituire le parentesi iniziali e finali, String.replace() non funziona per i casi limite che il contenuto della lista contiene parentesi.

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

RISPOSTA GIUSTA anzi! – blueSky

Problemi correlati