2011-09-24 26 views
5

Tôi đang phân tích cú pháp nội dung bằng mã sau với jsoup.Xóa ngoặc vuông [] khỏi danh sách được đặt thành chế độ xem văn bản?

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

Vấn đề duy nhất là nội dung được trả về với dấu ngoặc xung quanh [] như thế.

Tôi đoán đó là do danh sách tôi đang đặt. Làm thế nào tôi có thể loại bỏ những?

Trả lời

19

Thay thế:

text = textList.toString(); 

với:

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

nó sẽ không hoạt động nếu có dấu ngoặc trong nội dung thực của danh sách văn bản – Sapience

1

Vâng, nó vì danh sách. Bạn phải lựa chọn:
Subclass bất cứ điều gì TextList là, và ghi đè toString() hoặc

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

Thực hiện phương pháp riêng của mình để tạo ra các String bạn không cần sử dụng lặp đi lặp lại và StringBuffer. Thực hành không tốt là replace dấu ngoặc đơn hoặc substring đầu ra như vậy.

1

Đối với hầu hết các đối tượng, phương pháp toString() không nhằm mục đích hiển thị, nhưng thường là gỡ lỗi. Điều này là do phương pháp toString() thường không có định dạng cụ thể và có thể khác nhau tùy thuộc vào từng lớp cụ thể được sử dụng. Ví dụ, một LinkedList và ArrayList có thể trả về các giá trị khác nhau từ toString(). Nó không chắc, nhưng một cái gì đó bạn nên tránh dựa vào. Tất nhiên, nếu đối tượng đại diện cho văn bản thực tế (String, StringBuilder, CharSequence), thì điều này không áp dụng.

Ngoài ra, bạn đang tạo và gán chuỗi nhiều lần trong vòng lặp for. Thay vào đó, bạn chỉ nên tạo chuỗi sau khi vòng lặp for được thực hiện.

Để tạo chuỗi, bạn có thể cuộn chuỗi của riêng mình hoặc sử dụng thư viện như Apache commons lang, có phương thức tiện ích StringUtils.join().

Nếu bạn cuộn của riêng bạn, nó có thể trông giống như thế này:

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

Bạn có thể ghi đè lên phương thức toString().

Set dụ:

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

Sử dụng:

SetPrinter mới (SetToPrint) ToString();

2

Sử dụng regex để thay thế dấu ngoặc đầu và cuối, String.replace() không hoạt động đối với các trường hợp cạnh mà nội dung của danh sách chứa dấu ngoặc vuông.

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

TRẢ LỜI TRẢ LỜI! – blueSky

Các vấn đề liên quan