Avatar billede thomasaarhus Nybegynder
07. december 2004 - 23:28 Der er 4 kommentarer og
1 løsning

Metode der fjerner alle html tags

Hvordan laver jeg lettest en metode, der fjerner alle html tags fra en string. Så

<td> <nobr> <a href="onsdag.html"> Gå til </a> Onsdag </nobr> </td>

bliver til

Gå til onsdag

Vh Thomas
Avatar billede arne_v Ekspert
07. december 2004 - 23:35 #1
Jeg har lidt svært ved lige at se hvordan man kunne regex'e dette problem.

Så mit første forslag er the good oldfashioned way:

public class Strip {
    public static String strip(String s) {
        StringBuffer sb = new StringBuffer("");
        boolean intag = false;
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch(c) {
                case '<':
                    intag = true;
                    break;
                case '>':
                    intag = false;
                    break;
                default:
                    if(!intag) {
                        sb.append(c);
                    }
                    break;
            }
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        String s = "<td> <nobr> <a href=\"onsdag.html\"> Gå til </a> Onsdag </nobr> </td>";
        System.out.println(s);
        System.out.println(strip(s));
    }
}
Avatar billede thomasaarhus Nybegynder
08. december 2004 - 00:21 #2
Det ser fint ud. Jeg har udvidet swichen en lille smule, så den også fjerner tabs og linieskift.

public static String strip(String s) {
    StringBuffer sb = new StringBuffer("");
    boolean intag = false;
    for(int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        switch(c) {
            case '<':
                intag = true;   
                break;
            case '>':
                intag = false;
                break;
            case '\t':
                break;
            case '\n':
                break;
            case '\r':
                break;
            default:
                if(!intag) {
                    sb.append(c);
                }
                break;
        }
    }
    return sb.toString();
}

Jeg er dog i tvivl om hvilke tegn jeg skal tage med for linieskift, om der er flere. Og da jeg gik i gang med at eksperimentere med det, så fandt jeg f.eks. ud af at hvis man udskifter

case '\r'  ---->  case '_'

så bliver strengen totalt mærkelig. Den overskriver nærmest sig selv, sådan at det ligner at tilfældige stumper af den ønskede tekst bliver sat sammen. Det er ikke fordi jeg har brug for at fjerne alle "_", men jeg fatter bare ikke hvad der sker.

Hvis du har en forklaring vil jeg da gerne høre den, men ellers kan du bare smide et svar.
Avatar billede arne_v Ekspert
08. december 2004 - 07:56 #3
Linieskift er normalt \r\n men kan også være kun \n
Avatar billede arne_v Ekspert
08. december 2004 - 07:56 #4
Men ikke noget midt imellem (jeg er ikek engang sikker på at de genkendes som valide
escape sekvenser.
Avatar billede arne_v Ekspert
08. december 2004 - 07:56 #5
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester