2011-09-24 15 views
5

मैं jsoup के साथ निम्न कोड का उपयोग कर सामग्री पार्सिंग कर रहा हूं।एक सूची से सेट सूची में ब्रैकेट [] निकालें?

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

यदि टेक्स्टलिस्ट – Sapience

1

हाँ, सूची की वजह से अपनी। आप विकल्प के लिए है:
उपवर्ग जो कुछ TextList है, और toString() या

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

ओवरराइड अपनी खुद की विधि को लागू बनाने के लिए String आप यात्रा और StringBuffer का उपयोग कर की जरूरत है। यह replace कोष्ठक या substring ऐसे आउटपुट के लिए एक अच्छा अभ्यास नहीं है।

1

अधिकांश ऑब्जेक्ट्स के लिए, toString() विधि का उपयोग डिस्प्ले के लिए उपयोग नहीं किया जाना है, लेकिन आमतौर पर डिबगिंग। ऐसा इसलिए है क्योंकि toString() विधि में आमतौर पर एक विशिष्ट प्रारूप नहीं होता है और उपयोग की जाने वाली विशिष्ट कक्षा के आधार पर भिन्न हो सकता है। उदाहरण के लिए, एक लिंक्डलिस्ट और ऐरेलिस्ट toString() से अलग-अलग मान वापस कर सकता है। यह असंभव है, लेकिन इसकी कुछ चीज आपको भरोसा करने से बचना चाहिए। बेशक, यदि वस्तु वास्तविक पाठ (String, StringBuilder, CharSequence) का प्रतिनिधित्व करती है, तो उपर्युक्त लागू नहीं होता है।

इसके अलावा, आप लूप के लिए कई बार स्ट्रिंग बना रहे हैं और असाइन कर रहे हैं। इसके बजाय, आपको केवल लूप के बाद स्ट्रिंग बनाना चाहिए।

स्ट्रिंग बनाने के लिए आप अपना खुद का रोल कर सकते हैं या 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

की वास्तविक सामग्री में ब्रैकेट्स हैं तो यह काम नहीं करेगा, वास्तव में सही जवाब दें! – blueSky

संबंधित मुद्दे