2012-03-04 17 views
0

私はラボの割り当てがあり、htmlタグを削除することに専念しています。ここでHTMLタグを除去する方法は次のとおりです。残りのhtmlタグを削除する

public String getFilteredPageContents() { 
    String str = getUnfilteredPageContents(); 
    String temp = ""; 
    boolean b = false; 
    for(int i = 0; i<str.length(); i++) { 
     if(str.charAt(i) == '&' || str.charAt(i) == '<') { 
      b = true; 
     } 
     if(b == false) { 
      temp += str.charAt(i); 
     } 
     if(str.charAt(i) == '>' || str.charAt(i) == ';') { 
      b = false; 
     } 
    } 
    return temp; 
} 

そして、ここには私のテキスト最古の形式です:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> 
<html> 

<head> 
<meta http-equiv="Content-Type" 
content="text/html; charset=iso-8859-1"> 
<meta name="GENERATOR" content="Microsoft FrontPage 2.0"> 
<title>A Shropshire Lad</title> 
</head> 

<body bgcolor="#008000" text="#FFFFFF" topmargin="10" 
leftmargin="20"> 

<p align="center"><font size="6"><strong></strong></font>&nbsp;</p> 
<div align="center"><center> 

<pre><font size="7"><strong>A Shropshire Lad 
</strong></font><strong> 
by A.E. Housman 
Published by Dover 1990</strong></pre> 
</center></div> 

<p><strong>This collection of sixty three poems appeared in 1896. 
Many of them make references to Shrewsbury and Shropshire, 
however, Housman was not a native of the county. The Shropshire 
of his book is a mindscape in which he blends old ballad meters, 
classical reminiscences and intense emotional experiences 
&quot;recollected in tranquility.&quot; Although they are not 
particularly to my taste, their style, simplicity and 
timelessness are obvious even to me. Below are two short poems 
which amused me, I hope you find them interesting too.</strong></p> 

<hr size="8" width="80%" color="#FFFFFF"> 
<div align="left"> 

<pre><font size="5"><strong><u> 
XIII</u></strong></font><font size="4"><strong> 

When I was one-and-twenty 
I heard a wise man say, 
'Give crowns and pounds and guineas 
But not your heart away;</strong></font></pre> 
</div><div align="left"> 

<pre><font size="4"><strong>Give pearls away and rubies 
But keep your fancy free. 
But I was one-and-twenty, 
No use to talk to me.</strong></font></pre> 
</div><div align="left"> 

<pre><font size="4"><strong>When I was one-and-twenty 
I heard him say again, 
'The heart out of the bosom 
Was never given in vain; 
'Tis paid with sighs a plenty 
And sold for endless rue' 
And I am two-and-twenty, 
And oh, 'tis true 'tis true. 

</strong></font><strong></strong></pre> 
</div> 

<hr size="8" width="80%" color="#FFFFFF"> 

<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font><font 
size="4"><strong> 

'Far I hear the bugle blow 
To call me where I would not go, 
And the guns begin the song, 
&quot;Soldier, fly or stay for long.&quot;</strong></font></pre> 

<pre><font size="4"><strong>'Comrade, if to turn and fly 
Made a soldier never die, 
Fly I would, for who would not? 
'Tis sure no pleasure to be shot.</strong></font></pre> 

<pre><font size="4"><strong>'But since the man that runs away 
Lives to die another day, 
And cowards' funerals, when they come, 
Are not wept so well at home,</strong></font></pre> 

<pre><font size="4"><strong>'Therefore, though the best is bad, 
Stand and do the best, my lad; 
Stand and fight and see your slain, 
And take the bullet in your brain.'</strong></font></pre> 

<hr size="8" width="80%" color="#FFFFFF"> 
</body> 
</html> 

そしてときに、このテキストの上に私のメソッドを実装します。

charset=iso-8859-1"> 

A Shropshire Lad 







A Shropshire Lad 

by A.E. Housman 
Published by Dover 1990 


This collection of sixty three poems appeared in 1896. 
Many of them make references to Shrewsbury and Shropshire, 
however, Housman was not a native of the county. The Shropshire 
of his book is a mindscape in which he blends old ballad meters, 
classical reminiscences and intense emotional experiences 
recollected in tranquility. Although they are not 
particularly to my taste, their style, simplicity and 
timelessness are obvious even to me. Below are two short poems 
which amused me, I hope you find them interesting too. 
. 
. 
. 

私の質問は次のとおりです。テキストの最初の部分にあるこの小さなコードをどうやって取り除くことができますか?charset=iso-8859-1">私はそのコードの束から離れることができないのですか?ありがとう...

+0

あなたはフロントページの使用を避けることで始めることができます。そのようなツールは、適切なコードと引き換えに便利かもしれません。 – Joseph

+0

おそらくFrontPageを避けるのは良い考えです。しかし、どこから来たのかに関わらず、HTMLコードを処理することが課題だと思いました。 – Nayuki

答えて

2

あなたの目的は、<xxx>&xxx;のようなものを削除することです。変数bを使用して、現在スキップしているかどうかを覚えています。

あなたのアルゴリズムは<xxx;&xxx>という形式のものをスキップすることに気付きましたか?すなわち、&または<を開始するスキップ原因となり、そして>または;は最後までスキップが発生しますが、あなたが>、または;&<と一致する必要はありません。では、どのキャラクターがスキップを開始したかを記憶するコードを実装するのはどうですか?

さらに複雑化は、しかし、このように、&xxx;ものが<xxx>ものに埋め込むことができるということである。<p title="&amp;">

文字列が長い場合ちなみに、temp += str.charAt(i);はあなたのプログラムが非常に遅くなります。代わりにStringBuilderを使用して見てください。ここで


はあなたの問題やそれに近いが解決すべきいくつかのコードです:

import java.util.Stack; 

public String getFilteredPageContents() { 
    String str = getUnfilteredPageContents(); 
    StringBuilder() temp = new StringBuilder(); 

    // The closing character for each thing that we're inside 
    Stack<Character> expectedClosing = new Stack<Character>(); 

    for(int i = 0; i<str.length(); i++) { 
     char c = str.charAt(i); 
     if(c == '<') 
      expectedClosing.push('>'); 
     else if(c == '&') 
      expectedClosing.push(';'); 

     // Is the current character going to close something? 
     else if(!expectedClosing.empty() && c == expectedClosing.peek()) 
      expectedClosing.pop(); 

     else { 
      // Only add to output if not currently inside something 
      if(expectedClosing.empty()) 
       temp.append(c); 
     } 
    } 
    return temp.toString(); 
} 
0

これは学校の割り当てですが、万が一、あなたは、このような仕事のためのthisとしてうまく形成されたHTMLパーサーを使用することができます?

+0

私はこの割り当てに外部ライブラリまたはパーサーを使用することができません。 – El3ctr0n1c4

0

このシナリオを解決する最も洗練された方法はおそらくregular expressionsを使用しています。それらを使用すると、タグ構造を検索して出力から削除することができます。

しかし、すでにプログラムをコーディングしていて、言及した問題を除いてうまく動作するので、すばやく&で解決できます。

私が考えることの1つは、ラインごとにテキスト出力をスキャンし、それらが存在する場合はそれらを削除するフィルタのようなアルゴリズムを適用することです。各行を読んで、最後の文字が>かどうかをチェックするのと同じです。行を削除する場合は/空の文字列で置き換えます。通常のテキストでは、>と文末があってはならないので、あまりにも多くの問題を抱えてはいけません。

関連する問題