Programmierstill: Bitte testen anhand HTML-Tool

Status
Nicht offen für weitere Antworten.
M

michi2

Bekanntes Mitglied
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.

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

Caffè Latte

Bekanntes Mitglied
Hi,

ich habe den Code jetzt nicht komplett gelesen; aber was stört ist:

- dein "Denglish": z.T. englische Bezeichner, dann wieder deutsche
- Rechtschreibfehler ("komplet": was soll das heißen?)
- Mißachtung der Java Konventionen: "Linkremover" müsste "LinkRemover" geschrieben werden

Ich hoffe du nimmst das jetzt nicht persönlich ... ;)
 
M

michi2

Bekanntes Mitglied
Nö, das sind schon mal 3 Punkte
zu 2: kennst du einen Editor der mir Variablen- Klassen und Methoden-mamen sowie Komentar und Strings auf rechtschreibung prüft, den Rest aber nicht?
Bin Legasthenikern (wie man an meinen Eintragungen vermutlich merkt) und mir fällt sowas meistens nicht auf!

zu 3: sollte aber nur noch dieser eine Nammen sein, oder?
 
Wildcard

Wildcard

Top Contributor
Zu deiner Frage:
ohne mich damit groß beschäftigt zu habe kann ich schonmal sagen das deine main-Methoden viel zu lang ist.
main sollte am besten gar keine Logik enthalten, sondern nur etwas anstoßen.
Weiterhin ist alles sehr prozedural und statisch. Das mag man nun bei einer Util Klasse akzeptieren, was sie aber auch zum denkbar schlechtesten Beispiel macht um deinen Stil zu beurteilen...
Wenn du ein Objekt, das du über einen Paramter bekommst, in einer Methode manipulierst, dann ist es völlig sinnlos dieses Objekt wieder zurückzugeben.
zu 2:
Eclipse kann das. Mit einem entsprechenden Plugin eventuell sogar in deutsch
 
G

Gast

Gast
Zeile 19 ist viel zulang, solltest du in mehrere zeilen aufteilen

ausserdem die imports: du importierst util.* und dann noch mal ArrayList und List extra.
Am besten jede Klasse einzeln importieren und kein * es sein denn es sind zuviele.
 
G

Gast

Gast
und die ganzen methoden könntest du auch mal public/private setzen
 
Wildcard

Wildcard

Top Contributor
Gast hat gesagt.:
ausserdem die imports: du importierst util.* und dann noch mal ArrayList und List extra.
Am besten jede Klasse einzeln importieren und kein * es sein denn es sind zuviele.
Solange man bei einer Schreibweise bleibt ist es eigentlich egal, da der Compiler die überflüssigen Imports alleine rausschmeißt.
 
M

michi2

Bekanntes Mitglied
Zu Zeile 19: Soll ich das aus ner txt einlesen lassen?
 
Wildcard

Wildcard

Top Contributor
Nicht bei einem kleinen, einsprachigen Programm. Mach einfach mehrere Zeilen draus
 
S

SlaterB

Gast
niemals if mit nur einer Zeile dahinter ohne Klammern finde ich,

ansonsten gibt es eine einfache Regel die fast immer gilt: Code so wenig wie möglich wiederholen, soviel wie möglich in eigene Operationen auslagern

da ist dein Gesamtwerk ein haarsträubenden Gegenbeispiel, was dich hoffentlich nicht allzu sehr trifft ;)
ich weiß gar nicht wie oft ich htmltext.getText().indexOf lese,
oder die Folge start, end, replace,

doppelte Schleifen sind auch mit Vorsicht zu genießen

gerade bei Beispielen wie
Code:
     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;
                  }
               }
            }

sähe ein Operaionsaufruf viel besser aus:
Code:
 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++)
               {
                   suche(suchst[j],replacetxt[j]);               
               }
            } 

------------
        suche(String a, String b usw) {
           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;
                  }
       }

das ist eine feine logische Trennung, auf der einen Seite (unten), das bekannte Ersetzungsschema,
sollte man nach dem bisherigen Code schon zur genüge kennen ;)
dadrüber was völlig anderes, davon unabhängiges, nämlich eine Aufzählung mehrerer Strings

----------

wieso sind eigentlich die Operation von InOutput statisch und vom Linkremover nicht?
beide sprichst du dann aber gleich an mit new Object()..,

es würde in der Main übrigens auch reichen, von beiden Klassen je ein Objekt anzulegen, nicht eines für jede neue Operation,
wenn man Objekte nicht speichert und wiederverwendet , dann ruhig gleich statische Operation

-------------

wofür braucht man bei dem ganzen eigentlich die JTextArea?
reicht nicht ein einfacher String? wenns nur an dem replaceRange() liegt, das klingt ja nicht allzu schwer,
einfach substring von 0 bis start und von ende bis String-ende,

wenn du überall htmltext.getText() durch text ersetzen könntest wäre alles schon viel lesbarer
(so auch nicht schlecht, nur nicht optimal wenn da was zum Ersetzen schreit ;) )

-------------------

for(int i =0; htmltext.getText().indexOf(suchst[j], i)!=-1; )
{
...
i=start+ 1;
}

finde ich persönlich gar nicht schön, wenn schon for, dann doch nicht i, so sieht alles zunächst nach einer normalen i-Zählung aus,
besser:

int shift = 0;
while (htmltext.getText().indexOf(suchst[j], shift)!=-1; ) {

shift = start+1
}

oder in diesem Fall auch ganz ohne i und ohne doppeltes auslesen der Position:

int start = htmltext.getText().indexOf(suchst[j]);
while (start != -1) {
end ..
replace..

start = htmltext.getText().indexOf(suchst[j],start+1);
}

naja, wenns zu tricky wird, dann vielleicht auch wieder unverständlich ;)


---------------------

gefährlich sind Zeilen wie
int start = htmltext.indexOf("<a name=\"", i) + 9;
int ende = htmltext.getText().indexOf("</a>", start) + 4;

wie leicht verzählt man sich da in der Länge oder ändern einen String ohne die Zahl mitzuändern
(ist zum Beispiel +1 in deiner Zeile 124 richtig)?

am besten da die Länge des benutzen Strings verwenden,
z.B.
Code:
gibIndex(String text, String such, int von, boolean mitSuch) {
  int index= text.indexOf(such,von);
  if (mitSuch) {
   index += such.length;
  }
}
einmal geschrieben und ein Leben lang keine Probleme mehr mit 4, 9 oder wer weiß was,
nur noch eine Frage von mitSuch oder ohneSuch
-------------------------------------

die wichtigste Erkenntnis, wie am Anfang schon angedeutet:
unbedingt eine replaceAll-Operation, mit startn ende replace,
die dann von den anderen gerufen wird,

ist nicht überall einsetzbar und manchmal benutzt du merkwürdige Ausnahmen (wie in Zeile 124),
so dass mein schneller Versuch sicher nicht korrekt ist,
aber sieht schicker aus ;)

Code:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JTextArea;

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:\t Linkremover options file [outputfile]\n\n"
					+ "options:\n\nP: Entfernt alle Bilder\nT: Entfernt alle Links auf \"#top\" mit Link-Text\n"
					+ "i: Entfernt alle Internen Links ohne Link-Text\n"
					+ "I: Entfernt alle Internen Links mit Link-Text\ne: Entfernt alle Externen Links"
					+ " ohne Link-Text\nE: Entfernt alle Externen Links mit Link-Text\na: Entfernt alle"
					+ " Links ohne Link-Text\nA: Entfernt alle Links mit Link-Text\nl: Listet alle"
					+ " Linkziehle auf\n\nMichael Schönitzer\n");
			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(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
			{
			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) {
		htmltext = replaceAll(htmltext, "<img", ">", true, "");
		return htmltext;
	}
	//Alle Links enfernen
	JTextArea removeAllLinks(JTextArea htmltext, boolean komplet) {
		if (!komplet) //Ohne Link-Text
			{
			htmltext = replaceAll(htmltext, "<a", ">", true, "");
			htmltext.setText(htmltext.getText().replaceAll("</a>", ""));
		} //Ende if(!komplet)

		if (komplet) //Mit Text
			{
			htmltext = replaceAll(htmltext, "<a", "</a>", false, "");
		} //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++) {
				htmltext =
					replaceAll(htmltext,suchst[j],"</a>",true,replacetxt[j]);
			}
		} //Ende if(komplet)

		if (!komplet) //Ohne Link-Text
			{
			for (int j = 0; j < suchst.length; j++) {
				htmltext = replaceAll(htmltext, suchst[j], ">", true, "");
			}
			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++) {
				htmltext = replaceAll(htmltext,suchst[j],"</a>",true,replacetxt[j]);
			}
		}
		if (!komplet) //Ohne Link-Text
			{
			for (int j = 0; j < suchst.length; j++) {
				htmltext = replaceAll(htmltext, suchst[j], ">", true, "");
			}
			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++) {
			htmltext =
				replaceAll(htmltext, suchst[j], "</a>", true, replacetxt[j]);
		}
		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();
	}

	private JTextArea replaceAll(JTextArea htmltext,	String searchBegin,
		String searchEnd, boolean includeEnd, String replaceString) {

		for (int i = 0; htmltext.getText().indexOf(searchBegin, i) != -1;) {
			int start = htmltext.getText().indexOf(searchBegin, i);
			//System.out.println("start: "+start);
			int ende = htmltext.getText().indexOf(searchEnd, start) + 1;
			if (includeEnd) {
				ende = ende + searchEnd.length();
			}

			//System.out.println("ende: "+ende);
			if (ende != -1) {
				htmltext.replaceRange(replaceString, start, ende);
			}
			i = start + 1;
		}
		return htmltext;
	}

} //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"
 
M

me.toString

Bekanntes Mitglied
Man kann gar nicht erkennen, wo eine Methode aufhört und die nächste Anfängt - ein wenig mehr Abstand tut ja nicht weh. Und dann habe ich so gut wie keine Kommentare (JavaDoc und "normale" Kommentare) geshen. Es ist, gerade für Leute die den Code nicht selber geschrieben haben, recht schwer, sich durch solch ein Code-Knäul zu wühlen. Aber auch für dich selbst solltest du mehr kommentieren - wenn du in einem Jahr da noch mal reinschaust, weisst du nicht mehr, welche Methode was macht !
 
Reeny

Reeny

Aktives Mitglied
Boah, Slater!

Von dir würd ich mich aber nicht beurteilen lassen :bae:
Du findest ja jeden kleinen Schönheitsfehler, hehehe :D

Als michi2 würde ich jetzt mit dem Programmieren aufhören und mit dem Trinken anfangen, weil mein Selbstbewußtsein dahin ist :lol:
 
M

michi2

Bekanntes Mitglied
Reeny hat gesagt.:
Als michi2 würde ich jetzt mit dem Programmieren aufhören und mit dem Trinken anfangen, weil mein Selbstbewußtsein dahin ist :lol:
Ja, das hab ich mir in der letzten Zeit öffters überlegt...

Hab das jetzt überarbeitet:
Code:
import java.awt.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import java.lang.reflect.Method;


public class LinkRemover
   {
   public static void main (String[] args)
      {
      LinkRemover lr = new LinkRemover();
      
      lr.testArgs(String[] args);		//Argumente Testen
      JTextArea htmltext = new JTextArea(new InOutPut().lesen(datei));	//Text einlesen
      lr.analyzeparams(htmltext, args[0], args[0].length()==1);	//Optionen prüfen und Text entsprechend bearbeiten
      lr.write(htmltext, args);		//Text in Datei oder auf Monitor ausgeben
      } //Ende 'main'
   

   //prüft die Argumente
   void testArgs(String[] args)
      {
      if(args.length<2)
         {
         //Beschreibung der nötigen Argumente:
         System.out.println("HTML-Toolkit\n\nUsage:\t LinkRemover options file [outputfile]\n\noptions:\n\n"
         + "P: Entfernt alle Bilder\nT: Entfernt alle Links auf \"#top\" mit Link-Text\n"
         + "i: Entfernt alle Internen Links ohne Link-Text\nI: Entfernt alle Internen Links mit Link-Text\n"
         + "e: Entfernt alle Externen Links ohne Link-Text\nE: Entfernt alle Externen Links mit Link-Text\n"
         + "a: Entfernt alle Links ohne Link-Text\nA: Entfernt alle Links mit Link-Text\n"
         + "l: Listet alle Linkziehle auf\n\nMichael Schönitzer\n");
         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);
         }
      }
   

   //Gibt den Text aus
   void write(JTextArea htmltext, String[] args)
      {
      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);
         }
      }
   

   //Überprüft Parameter und führt entsprechene Aktionen aus
   JTextArea analyzeparams(JTextArea htmltext, String para, boolean outPutFileSpec)
      {
      //Die Parameter überprüfen:
      String parameter = para;
      LinkRemover lr = new LinkRemover();
      
      if(parameter.indexOf("l") != -1)		//l: Listet alle Linkziehle auf
         {
         ArrayList linkziele = lr.listLinkAnchors(htmltext.getText());
         String linkziele_String =  lr.ArrayList2String(linkziele);
         if(outPutFileSpec)
            htmltext.setText( linkziele_String );
         else
         htmltext.append("\n\n" + linkziele_String );
         }
      
      if(parameter.indexOf("P") != -1)		//P: Entfernt alle Bilder
         htmltext =  lr.removePics(htmltext);
      
      if(parameter.indexOf("T") != -1)		//T: Entfernt Alle Links auf "#top" mit Link-Text
         htmltext =  lr.removeTopLinks(htmltext);
      
      if(parameter.indexOf("i") != -1)		//i: Entfernt alle Internen Links ohne Link-Text
         htmltext =  lr.removeIntLinks(htmltext, false);
      if(parameter.indexOf("I") != -1)		//I: Entfernt alle Internen Links mit Link-Text
         htmltext =  lr.removeIntLinks(htmltext, true);
      
      if(parameter.indexOf("e") != -1)		//e: Entfernt alle Externen Links ohne Link-Text
         htmltext =  lr.removeExtLinks(htmltext, false);
      if(parameter.indexOf("E") != -1)		//E: Entfernt alle Externen Links mit Link-Text
         htmltext =  lr.removeExtLinks(htmltext, true);
      
      if(parameter.indexOf("a") != -1)		//a: Entfernt Alle Links ohne Link-Text
         htmltext =  lr.removeAllLinks(htmltext, false);
      if(parameter.indexOf("A") != -1)		//A: Entfernt Alle Links mit Link-Text
         htmltext =  lr.removeAllLinks(htmltext, true);
      return htmltext;
      }
   
   
   //Bilder entfernen
   JTextArea removePics(JTextArea htmltext)
      {
      searchAndReplaceRange(htmltext, "<img", ">", "");
      return htmltext;
      }
   
   
   //Alle Links enfernen
   JTextArea removeAllLinks(JTextArea htmltext, boolean komplett)
      {
      if(!komplett)	//Ohne Link-Text
         {
         searchAndReplaceRange(htmltext, "<a", ">", "");
         htmltext.setText(htmltext.getText().replaceAll("</a>",""));
         }	//Ende if(!komplett)
         
      if(komplett)	//Mit Text
         {
         searchAndReplaceRange(htmltext, "<a", "</a>", "");
         }	//Ende if(komplett)
         return htmltext;
      }
   
   
   //Links zu anderen Seiten entfernen
   JTextArea removeExtLinks(JTextArea htmltext, boolean komplett)
      {
      String[] suchst = {"<a href=\"http://",  "<a\r\n href=\"http://"};
         String[] replacetxt = {"",  "\r\n", "
",  "\r\n
" };
         if(komplett)	//komplettt entfernen
            {
            for(int j=0; j<suchst.length; j++)
               {
               searchAndReplaceRange(htmltext, suchst[j], "</a>", replacetxt[j]);
               }
            }	//Ende if(komplett)
            if(!komplett)	//Ohne Link-Text
               {
               for(int j=0; j<suchst.length; j++)
                  {
                  searchAndReplaceRange(htmltext, suchst[j], ">", replacetxt[j]);
                  }
               htmltext.setText(htmltext.getText().replaceAll("</a>",""));
               }	//Ende if(!komplett)
               return htmltext;
            }	//Ende removeExtLinks(...)
         
         
         //Links zu internen Sprung-Punktenentfernen
         JTextArea removeIntLinks(JTextArea htmltext, boolean komplett)
            {
            String[] suchst = {"<a href=\"#",  "<a\r\n href=\"#" };
            String[] replacetxt = {"", "\r\n", "
", "\r\n
" };
            if(komplett)	// komplettt entfernen
               {
               for(int j=0; j<suchst.length; j++)
                  {
                  searchAndReplaceRange(htmltext, suchst[j], "</a>", replacetxt[j]);
                  }
               }
            if(!komplett)	//Ohne Link-Text
               {
               for(int j=0; j<suchst.length; j++)
                  {
                  searchAndReplaceRange(htmltext, suchst[j], ">", replacetxt[j]);
                  }
               htmltext.setText(htmltext.getText().replaceAll("</a>",""));
               }
            return htmltext;
            }
         
         
         //Links zu '#top' komplettt 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++)
               {
               searchAndReplaceRange(htmltext, suchst[j], "</a>", replacetxt[j]);
               }
            return htmltext;
            }
         
         
         JTextArea searchAndReplaceRange(JTextArea htmltext, String searchfrom, String searchto, String replace)
            {
            for(int i =0; htmltext.getText().indexOf(searchfrom, i)!=-1; )
               {
               int start = htmltext.getText().indexOf(searchfrom, i);
               int ende = htmltext.getText().indexOf(searchto, start) + searchto.length();
               if(ende != -1)
                  {
                  htmltext.replaceRange(replace,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'.
         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
         
         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"
 
B

Beni

Gast
michi2 hat gesagt.:
Reeny hat gesagt.:
Als michi2 würde ich jetzt mit dem Programmieren aufhören und mit dem Trinken anfangen, weil mein Selbstbewußtsein dahin ist :lol:
Ja, das hab ich mir in der letzten Zeit öffters überlegt...
[schild=8 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Der wahrhaft Weise erträgt Kritik[/schild]

- Positiv finde ich die Grösse der Methode, es sind keine gigantischen Monster.
- Hübsch wären Javadoc-Kommentare.
- Wenn du schon einen FileWriter machst, benutz doch auch gleich die "write( String )"-Methode :wink:
- Du benutzt die TextArea nur als Speicher für deinen String? Das ist etwa so sinnvoll wie ein Containerschiff zu bentzen nur um einen einzigen Apfel über den Atlantik zu transportieren. Speicher den String doch direkt, oder benutz ein StringBuffer/Builder.
- Viele deiner Methoden haben die Form "X machwasMit( X x )", das wäre mit Vererbung "extends X" hübscher gewesen (das gilt nicht, wenn du anstelle der TextArea direkt String verwendest, da man von String ja nicht erben kann).
 
foobar

foobar

Top Contributor
Insgesamt ist das Programm noch sehr prozedural. Du denkst noch nicht in Objekten. Anstatt der Methode testArgs könntest du auch einen ParameterParser implementieren, der dann über einen Dispatcher bestimmte Aktionen ausführt oder die Parameter in einer Bean spiechert.
 
M

michi2

Bekanntes Mitglied
- Wenn du schon einen FileWriter machst, benutz doch auch gleich die "write( String )"-Methode ;)
Sorry, versteh nicht was du meinst...

- Du benutzt die TextArea nur als Speicher für deinen String? Das ist etwa so sinnvoll wie ein Containerschiff zu bentzen nur um einen einzigen Apfel über den Atlantik zu transportieren. Speicher den String doch direkt, oder benutz ein StringBuffer/Builder.
Ja, werd das ändern, bin nur noch nicht dazu gekommen...

foobar hat gesagt.:
Insgesamt ist das Programm noch sehr prozedural. Du denkst noch nicht in Objekten. Anstatt der Methode testArgs könntest du auch einen ParameterParser implementieren, der dann über einen Dispatcher bestimmte Aktionen ausführt oder die Parameter in einer Bean spiechert.
Fachausdrücke über Fachausdrücken, was ist jezt ein Dispatcher schon wieder?
 
B

Beni

Gast
michi2 hat gesagt.:
- Wenn du schon einen FileWriter machst, benutz doch auch gleich die "write( String )"-Methode ;)
Sorry, versteh nicht was du meinst...

Du schreibst:
Code:
void schreiben(File einausgabedatei, String text)
            ...
               FileWriter ausgabe = new FileWriter(einausgabedatei);  // <<< Filewriter
               while( ... ){ ... sehrKompliziert ... }
             ...

In der API steht
"write( String )"

Und ein FileWriter erbt von Writer (auch das steht in der API), also muss man nicht jedes Zeichen einzeln in den Writer schicken.
 
M

michi2

Bekanntes Mitglied
Ah! Gut werd ich vieleicht machen, weis aber noch nicht ob ich beim FileWriter bleibe...
 
foobar

foobar

Top Contributor
foobar hat gesagt.:
Insgesamt ist das Programm noch sehr prozedural. Du denkst noch nicht in Objekten. Anstatt der Methode testArgs könntest du auch einen ParameterParser implementieren, der dann über einen Dispatcher bestimmte Aktionen ausführt oder die Parameter in einer Bean spiechert.
Fachausdrücke über Fachausdrücken, was ist jezt ein Dispatcher schon wieder?[/quote]

Guckst du hier: http://www.java-forum.org/de/viewtopic.php?t=9256
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Bilder bei bestimmten Zeiten wechseln, bitte um Hilfe Allgemeine Java-Themen 5
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
I Bitte Drngend hilfe Allgemeine Java-Themen 2
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
M Input/Output Java + OCR ? Erfahrungen und bitte um Hilfe Allgemeine Java-Themen 12
F Bitte um Hilfe! Allgemeine Java-Themen 5
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
J Probleme bei kompilieren ... Bitte um Hilfe Allgemeine Java-Themen 2
Jats ArrayList-Error Index: 1 Size:1 - Bitte um Hilfe Allgemeine Java-Themen 36
S Bitte um Hilfe Allgemeine Java-Themen 8
N "Bitte warten"-Meldung Allgemeine Java-Themen 6
I Studium - bitte dringend helfen !!! Allgemeine Java-Themen 17
C Eclipse spinnt - bitte Helfen! Allgemeine Java-Themen 3
J Probiert mal bitte aus (Thread + Runtime) Allgemeine Java-Themen 10
L Java6 update N bekommt neues Browser-Plugin, bitte testen. Allgemeine Java-Themen 7
J Bitte um Kurzinfo bez. JMF (ja, war bei Forumssuche/google) Allgemeine Java-Themen 2
E Bitte um Rat: Sortieren mit ArrayList Allgemeine Java-Themen 2
P Bitte um Hilfe Allgemeine Java-Themen 4
K Hab Sch***e gebaut - Bitte um Hilfe Allgemeine Java-Themen 7
G Zertifikat importieren? Bitte HILFE! Allgemeine Java-Themen 2
J synchronized (bitte beantworten, urgent! danke) Allgemeine Java-Themen 11
I Weiß nicht mehr weiter! Bitte helft mir! Allgemeine Java-Themen 5
P Was ist denn Bitte falsch? Allgemeine Java-Themen 2
M Bitte Testen: Mein Multi-File Editor Allgemeine Java-Themen 30
P Bitte kritisieren: rekursive Sortier-Methode Allgemeine Java-Themen 2
J könnt Ihr mir bitte mal den Fehler erläutern! Allgemeine Java-Themen 5
D Große Klasse - was fällt euch so ins Auge? Kritik bitte! Allgemeine Java-Themen 10
thE_29 Vor dem ersten Posten bitte lesen! Allgemeine Java-Themen 0
K bitte um hilfe bei file import Allgemeine Java-Themen 7
N Compiler (javac) funktioniert nicht... Bitte hilfe! Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
ZeusSeinGrossopa Testen ob neuer Tag beginnt Allgemeine Java-Themen 37
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
B Eclipse WebSocket programmiert, kann es leider nicht testen. Allgemeine Java-Themen 15
H OOP Testen einer Exception mit JUnit Allgemeine Java-Themen 8
perlenfischer1984 TestNG - Enum testen Allgemeine Java-Themen 1
perlenfischer1984 Testng : Funktion mit mehreren Parametern testen Allgemeine Java-Themen 5
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
F Testen von Methoden Allgemeine Java-Themen 3
B JUnit Zufalls Operation testen Allgemeine Java-Themen 1
P Testen von UIs Allgemeine Java-Themen 2
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
M Testen von verschiedenen Produktversionen Allgemeine Java-Themen 3
T EventBus testen Allgemeine Java-Themen 1
L JUnit - automatisiertes vs. manuelles Testen? Allgemeine Java-Themen 3
R Java Performance testen Allgemeine Java-Themen 18
B Mails testen Allgemeine Java-Themen 7
A AVL-Baum - Testen ob einer vorliegt Allgemeine Java-Themen 4
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
X Testen ob ein array leer ist Allgemeine Java-Themen 6
M Server-Responds testen, Code-Redundanz Allgemeine Java-Themen 3
fastjack Unit-Testen mit Mocks Allgemeine Java-Themen 6
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
H Thread Safety und Deadlocks testen Allgemeine Java-Themen 6
D Muss eine JNI Biblio testen (MAC OS X) Allgemeine Java-Themen 4
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
aokai Testen von Klassen die abhängig von Stdlibs URL sind Allgemeine Java-Themen 3
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
R Testen von Applets - versch. Browser und Java Versionen? Allgemeine Java-Themen 4
V Quellcode auf "Güte" testen? Allgemeine Java-Themen 5
G JAR-DAtei testen Allgemeine Java-Themen 15
J Klasse auf Konstruktor oder Methode testen? Allgemeine Java-Themen 3
A Junit Exceptions testen Allgemeine Java-Themen 3
Z Testen welches BS benutzt wird Allgemeine Java-Themen 3
G Testen von RMI,TCP/IP, Servlets etc. Allgemeine Java-Themen 2
M Welches Linux zum Java testen? Allgemeine Java-Themen 5
P Testen mit JUnit Allgemeine Java-Themen 8
G testen mit JUnit? Allgemeine Java-Themen 3
K Testen ob Methode existiert? Allgemeine Java-Themen 2
N Cashbook Management Testen Allgemeine Java-Themen 7
A testen ob Primzahl dauert bei größeren zahlen extrem lange Allgemeine Java-Themen 8
M String testen? Allgemeine Java-Themen 2
M String testen? Allgemeine Java-Themen 6
N auf typ testen? Allgemeine Java-Themen 3
K Testen einer Klasse mit File Objekt als Parameter Allgemeine Java-Themen 6
T GUI Testen Allgemeine Java-Themen 4
T GUI Testen Allgemeine Java-Themen 5
G Programm zum Testen der Striktheit von Java Allgemeine Java-Themen 9
H Laufwerk testen? Allgemeine Java-Themen 12
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
M Jemannd mit 1.4/1.3/1.2 zum Testen gesucht. Allgemeine Java-Themen 15
flashfactor Testen ob ein R/3 erreichbar bzw. noch am leben ist. Allgemeine Java-Themen 2
T Datum testen und Einsetzten Allgemeine Java-Themen 5
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
P Dateinamen mit regulärem Ausdruck testen Allgemeine Java-Themen 9
P Dateinamen testen? Schreibrechte auf Verzeichnis testen? Allgemeine Java-Themen 8

Ähnliche Java Themen

Anzeige

Neue Themen


Oben