2011-09-24 12 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

はい、そのためのリストの。
サブクラスどんなテキスト形式の一覧があり、かつStringあなたが反復してStringBufferを使用する必要が作成するために、独自のメソッドを実装のtoString() または

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

を上書き:[オプション]を持っています。 replaceかっこまたはsubstringのような出力は良い習慣ではありません。

1

ほとんどのオブジェクトでは、toString()メソッドは表示に使用することを意図したものではなく、通常はデバッグ用です。これは、toString()メソッドは一般的に特定の形式を持たず、使用される特定のクラスによって異なる可能性があるためです。たとえば、LinkedListとArrayListはtoString()から異なる値を返す可能性があります。それはありそうもありませんが、あなたが頼りにしてはいけないものです。もちろん、オブジェクトが実際のテキスト(String,StringBuilder,CharSequence)を表す場合、上記は適用されません。

また、forループで文字列を複数回作成して割り当てます。その代わりに、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

本当に正しいです! – blueSky

関連する問題