3

私はJSoupを使って歌詞を解析してきましたが、これまではうまく機能していましたが、問題が発生しました。

を使用Node.html()して、目的のノードの完全な HTML を返すことができます。これにより、改行が保持されます。

Glóandi augu, silfurnátt
<br />Bl&oacute;&eth; alv&ouml;ru, starir &aacute;
<br />&Oacute;&eth;ur hundur er &iacute; v&iacute;gam&oacute;&eth;, &iacute; maga... m&eacute;r
<br />
<br />Kolni&eth;ur gref, kvik sem dreg h&eacute;r
<br />Kolni&eth;ur svart, hvergi bjart n&eacute;

しかし、ご覧のとおり、HTML エンティティとタグを保持するという不幸な副作用があります。

ただし、 を使用するNode.text()と、タグやエンティティのない、見栄えの良い結果を得ることができます。

Glóandi augu, silfurnátt Blóð alvöru, starir á Óður hundur er í vígamóð, í maga... mér Kolniður gref, kvik sem dreg hér Kolniður svart,

これには、改行を削除して 1 行に圧縮するという別の不幸な副作用があります。

<br />呼び出す前に単にノードから置き換えるだけNode.text()で同じ結果が得られ、そのメソッドは改行を無視して、メソッド自体でテキストを 1 行に圧縮しているようです。

両方の世界を最大限に活用し、タグとエンティティを正しく置き換えて改行を維持することは可能ですか、またはエンティティをデコードして手動で置き換えることなくタグを削除する別の方法または方法はありますか?

4

2 に答える 2

1

stackoverflowからの別の回答に基づいて、いくつかの修正を追加して付属しています

    String text = Jsoup.parse(html.replaceAll("(?i)<br[^>]*>", "br2nl").replaceAll("\n", "br2nl")).text();
    text = text.replaceAll("br2nl ", "\n").replaceAll("br2nl", "\n").trim();

お役に立てれば

于 2012-03-13T15:54:49.907 に答える