Hallo,
Ihr kitisiert oft (zurecht) meinen Programmierstiehl, die meisten schlechten angewohnheiten hab ich mir jetzt abgewöhnt, und wollte jetzt wissen was ihr von folgenden Code haltet? Was mach ich nocht schlecht/falsch?
Es handelt sich um ein HTML-Tool das Links/Bilder und co entfernen kann.
Ihr kitisiert oft (zurecht) meinen Programmierstiehl, die meisten schlechten angewohnheiten hab ich mir jetzt abgewöhnt, und wollte jetzt wissen was ihr von folgenden Code haltet? Was mach ich nocht schlecht/falsch?
Es handelt sich um ein HTML-Tool das Links/Bilder und co entfernen kann.
Code:
import java.awt.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class Linkremover
{
public static void main (String[] args)
{
if(args.length<2)
{
//Beschreibung der nötigen Argumente:
System.out.println("HTML-Toolkit\n\nUsage: ....[edit: entfernt, da zu lang]
System.exit(-1);
}
File datei = new File(args[1]);
if(!datei.exists()) //Falsche Benutzer Eingabe
{
System.out.println("Datei" + args[1] + " existiert nicht");
System.exit(-1);
}
JTextArea htmltext = new JTextArea(new InOutPut().lesen(datei));
//Die Parameter überprüfen:
String parameter = args[0];
if(parameter.indexOf("l") != -1) //l: Listet alle Linkziehle auf
{
ArrayList linkziele = new Linkremover().listLinkAnchors(htmltext.getText());
String linkziele_String = new Linkremover().ArrayList2String(linkziele);
if(args[0].length()==1)
htmltext.setText( linkziele_String );
else
htmltext.append("\n\n" + linkziele_String );
}
if(parameter.indexOf("P") != -1) //P: Entfernt alle Bilder
htmltext = new Linkremover().removePics(htmltext);
if(parameter.indexOf("T") != -1) //T: Entfernt Alle Links auf "#top" mit Link-Text
htmltext = new Linkremover().removeTopLinks(htmltext);
if(parameter.indexOf("i") != -1) //i: Entfernt alle Internen Links ohne Link-Text
htmltext = new Linkremover().removeIntLinks(htmltext, false);
if(parameter.indexOf("I") != -1) //I: Entfernt alle Internen Links mit Link-Text
htmltext = new Linkremover().removeIntLinks(htmltext, true);
if(parameter.indexOf("e") != -1) //e: Entfernt alle Externen Links ohne Link-Text
htmltext = new Linkremover().removeExtLinks(htmltext, false);
if(parameter.indexOf("E") != -1) //E: Entfernt alle Externen Links mit Link-Text
htmltext = new Linkremover().removeExtLinks(htmltext, true);
if(parameter.indexOf("a") != -1) //a: Entfernt Alle Links ohne Link-Text
htmltext = new Linkremover().removeAllLinks(htmltext, false);
if(parameter.indexOf("A") != -1) //A: Entfernt Alle Links mit Link-Text
htmltext = new Linkremover().removeAllLinks(htmltext, true);
File outPutFile = null;
if(args.length>=3)
outPutFile = new File(args[2]);
if(outPutFile != null) //Ausgabe in Datei
{
new InOutPut().schreiben(outPutFile, htmltext.getText());
}
else //Ausgabe auf Monitor (Konsole)
{
System.out.println(htmltext.getText());
System.exit(-1);
}
} //Ende 'main'
//Bilder entfernen
JTextArea removePics(JTextArea htmltext)
{
for(int i =0; htmltext.getText().indexOf("<img", i)!=-1; )
{
int start = htmltext.getText().indexOf("<img", i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf(">", start)+1;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange("",start,ende);
}
i=start+1;
}
return htmltext;
}
//Alle Links enfernen
JTextArea removeAllLinks(JTextArea htmltext, boolean komplet)
{
if(!komplet) //Ohne Link-Text
{
for(int i =0; htmltext.getText().indexOf("<a", i)!=-1; )
{
int start = htmltext.getText().indexOf("<a", i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf(">", start)+1;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange("",start,ende);
}
i=start+1;
}
htmltext.setText(htmltext.getText().replaceAll("</a>",""));
} //Ende if(!komplet)
if(komplet) //Mit Text
{
for(int i =0; htmltext.getText().indexOf("<a", i)!=-1; )
{
int start = htmltext.getText().indexOf("<a", i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf("</a>", start)+1;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange("",start,ende);
}
i=start+1;
}
} //Ende if(komplet)
return htmltext;
}
//Links zu anderen Seiten entfernen
JTextArea removeExtLinks(JTextArea htmltext, boolean komplet)
{
String[] suchst = {"<a href=\"http://", "<a\r\n href=\"http://"};
String[] replacetxt = {"", "\r\n", "
", "\r\n
" };
if(komplet) //komplett entfernen
{
for(int j=0; j<suchst.length; j++)
{
for(int i =0; htmltext.getText().indexOf(suchst[j], i)!=-1; )
{
int start = htmltext.getText().indexOf(suchst[j], i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf("</a>", start) + 4;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange(replacetxt[j],start,ende);
}
i=start+1;
}
}
} //Ende if(komplet)
if(!komplet) //Ohne Link-Text
{
for(int j=0; j<suchst.length; j++)
{
for(int i =0; htmltext.getText().indexOf(suchst[j], i)!=-1; )
{
int start = htmltext.getText().indexOf(suchst[j], i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf(">", start)+1;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange("",start,ende);
}
i=start+1;
}
}
htmltext.setText(htmltext.getText().replaceAll("</a>",""));
} //Ende if(!komplet)
return htmltext;
} //Ende removeExtLinks(...)
//Links zu internen Sprung-Punktenentfernen
JTextArea removeIntLinks(JTextArea htmltext, boolean komplet)
{
String[] suchst = {"<a href=\"#", "<a\r\n href=\"#" };
String[] replacetxt = {"", "\r\n", "
", "\r\n
" };
if(komplet) // komplett entfernen
{
for(int j=0; j<suchst.length; j++)
{
for(int i =0; htmltext.getText().indexOf(suchst[j], i)!=-1; )
{
int start = htmltext.getText().indexOf(suchst[j], i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf("</a>", start) + 4;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange(replacetxt[j],start,ende);
}
i=start+1;
}
}
}
if(!komplet) //Ohne Link-Text
{
for(int j=0; j<suchst.length; j++)
{
for(int i =0; htmltext.getText().indexOf(suchst[j], i)!=-1; )
{
int start = htmltext.getText().indexOf(suchst[j], i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf(">", start)+1;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange("",start,ende);
}
i=start+1;
}
}
htmltext.setText(htmltext.getText().replaceAll("</a>",""));
}
return htmltext;
}
//Links zu '#top' komplett entfernen
JTextArea removeTopLinks(JTextArea htmltext)
{
String[] suchst = {"<a href=\"#top", "<a\r\n href=\"#top" };
String[] replacetxt = {"", "\r\n", "
", "\r\n
" };
for(int j=0; j<suchst.length; j++)
{
for(int i =0; htmltext.getText().indexOf(suchst[j], i)!=-1; )
{
int start = htmltext.getText().indexOf(suchst[j], i);
//System.out.println("start: "+start);
int ende = htmltext.getText().indexOf("</a>", start) + 4;
//System.out.println("ende: "+ende);
if(ende != -1)
{
htmltext.replaceRange(replacetxt[j],start,ende);
}
i=start+1;
}
}
return htmltext;
}
//Alle link-Anker auflisten
ArrayList listLinkAnchors(String htmltext)
{
ArrayList namen = new ArrayList();
for(int i =0; htmltext.indexOf("<a name=\"", i)!=-1; ) //"
{
int start = htmltext.indexOf("<a name=\"", i)+9; //"
int ende = htmltext.indexOf("\"", start); //"
if(ende != -1)
{
namen.add(htmltext.substring(start,ende)+"\r\n");
i=ende;
}
else
i=start+1;
}
return namen;
}
//Den Inhalt einer ArrayList in einen String umwandeln
String ArrayList2String(ArrayList al)
{
StringBuffer returnString = new StringBuffer();
for(int i = 0; i<al.size() ;i++)
returnString.append(al.get(i));
return returnString.toString();
}
} //ENDE class "Linkremover"
class InOutPut
{
//Scheibt den String 'text' in die Datei 'einausgabedatei'.
static void schreiben(File einausgabedatei, String text)
{
int zeichen,i;
try
{
// Den Text nun in der Datei speichern
FileWriter ausgabe = new FileWriter(einausgabedatei);
for(i = 0; i < text.length(); i++)
{
zeichen = (int) text.charAt(i);
ausgabe.write(zeichen);
}
// Datei schließen
ausgabe.close();
}
catch(IOException e)
{
System.out.println("Fehler beim Schreiben der Datei " + "\n");
einausgabedatei = null;
}
}//Ende schreiben
static String lesen(File einausgabedatei)
{
try
{
// Einen Eingabestrom öffnen und die Datei laden
StringBuffer lesepuffer= new StringBuffer(400* 400);
FileReader eingabe = new FileReader(einausgabedatei);
// solange Zeichen lesen, bis das Dateiende ( = -1) erreicht ist
char zeichen;
int gelesen;
int zeilen = 0;
boolean weiter = true;
while(weiter)
{
gelesen = eingabe.read();
if(gelesen == -1)
{
weiter = false;
continue;
}
zeichen = (char) gelesen;
lesepuffer.append( zeichen);
}
// Datei schließen
eingabe.close();
return lesepuffer.toString();
}
catch(IOException e)
{
System.out.println("Fehler beim lese der Datei " + einausgabedatei.toString() + "\n");
einausgabedatei = null;
return null;
}
} //Ende lesen
} //ENDE "InOutPut"