удаление оставшихся тегов HTML - PullRequest
0 голосов
/ 04 марта 2012

У меня есть лабораторное задание, и я остановился на удалении тегов 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;
}

А вот самая ранняя форма моего текста:

<code><!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>

Появилась эта коллекция из шестидесяти трех стиховв 1896 году. Многие из них ссылаются на Шрусбери и Шропшир, однако Хаусман не был уроженцем графства.«Шропшир» его книги - это образ мыслей, в котором он смешивает старые балладные метры, классические воспоминания и интенсивные эмоциональные переживания, «вспоминаемые в спокойствии».Хотя они не совсем мне по вкусу, их стиль, простота и вневременность очевидны даже для меня.Ниже приведены два коротких стихотворения, которые меня позабавили, надеюсь, вы тоже найдете их интересными.

<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>
<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>
<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>
<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>
<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>
<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>
<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>

И когда реализую мой метод для этого текста:

 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">.Я не могу уйти от этой связки кода?Спасибо ...

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Я вижу, что вы хотите удалить вещи, которые выглядят как <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 голосов
/ 04 марта 2012

Наиболее элегантный способ решения этого сценария, вероятно, будет использовать регулярные выражения .С их помощью вы можете специально искать структуры тегов и удалять их из выходных данных.

Однако, поскольку вы уже написали программу и она работает нормально, за исключением проблемы, которую вы упомянули, может быть достаточно быстрого и грязного решения.

Одна вещь, о которой я могу подумать, это применить фильтр-подобный алгоритм, который сканирует текстовый вывод построчно и удаляет их, если они присутствуют.Как чтение каждой строки и проверка, является ли последний символ >.Если это удалить строку / заменить ее пустой строкой.В обычном тексте не должно быть > и конца предложения, поэтому у вас не должно быть особых проблем.

0 голосов
/ 04 марта 2012

Это школьное задание, но есть ли шанс, что вы сможете использовать правильно сформированный анализатор HTML, такой как this для работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...