2011-09-24 56 views
5

我用jsoup使用下面的代碼解析內容。從設置爲textview的列表中刪除括號[]?

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

唯一的問題是內容與括號圍繞它返回[]。

我猜這是因爲我設置它的列表。我如何刪除這些?

回答

19

替換:

text = textList.toString(); 

有:

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

如果在textList的實際內容中有括號,那麼它將無法正常工作 – Sapience

1

是,名單中的原因。你必須選擇:
子類的任何文本清單是,並重寫的toString() 或

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

實現自己的方法來創建String需要使用迭代和StringBufferreplace括號或substring這樣的輸出不是一個好習慣。

1

對於大多數目的,toString()方法不旨在被用於顯示,但通常調試。這是因爲toString()方法通常沒有特定的格式,可能因所用的特定類別而異。例如,LinkedList和ArrayList可以從toString()返回不同的值。這不太可能,但它應該避免依賴的東西。當然,如果對象代表實際文字(StringStringBuilder,CharSequence),則上述內容不適用。

此外,要創建和循環多次分配的字符串中。相反,您只應在for循環完成後創建字符串。

要創建字符串,您可以創建自己的字符串或使用類似Apache commons lang的庫,該庫具有StringUtils.join()實用程序方法。

如果你滾你自己的,它可能是這個樣子:

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

,你可以覆蓋toString()方法。

設定實例:

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

用途:

新SetPrinter(SetToPrint)的ToString();

2

使用正則表達式替換前導括號和結尾括號,String.replace()對列表內容包含括號的邊緣情況不起作用。

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

RIGHT ANSWER的確如此! – blueSky