[S] Linkfilter in Java [B] 10€ PSC

12/11/2012 11:27 lolmatze#1
Hallo,

ich suche einen Coder der mir ein kleines Programm schreibt welches mittels Regular Expression, Links aus html Strings filtert.

zB:

String 1 = <A HREF="http://www.google.com">Google </A>

Ausgabe: "www.google.com"


Für mehr Informationen bitte per PM melden.



LG
12/12/2012 21:18 NotEnoughForYou#2
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class LinkFilter {
	private String link;
	
	public LinkFilter(String in) {
		this.link = in;		
	}
	
	public String getLink() {
		int startPos = this.link.indexOf("\"");
		int endPos = this.link.indexOf("\"", startPos + 1);
		
		return(this.link.substring(startPos + 1, endPos));
	}
	
	public static void main(String[] args) {
		
		System.out.println("Link eingeben");
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		
		try {
			String link = in.readLine();
			LinkFilter filter = new LinkFilter(link);
			
			System.out.println(filter.getLink());
		} 
		catch (IOException e) {
			e.printStackTrace();
		}		
	}
}
bsp:
<a href="http://www.ne4y.de">NE4Y</a>

-->
Code:
http://www.ne4y.de
ist zwar nicht direkt über Regex gemacht aber so gehts auch.
12/12/2012 22:56 Viper3001#3
@NotEnoughForYou
Das Beispiel das du gepostet hast würde jedes html attribut auch mit ausgeben z.B. id="blubb"

Glaube auch das deine Variante so nicht genau gewünscht war, da es auch kein regex verwendet, außerdem würde er bei dir nur den 1. Gefundenen eintrag ausgeben und nicht eine Liste aller Links. Seih mir nicht böse und siehe das bitte als konstruktive Kritik :D


So Zum Problem des Threadstarters:
Habe mich ein wenig schlau gemacht und auch diese Seite hier als Hilfe verwendet:
[Only registered and activated users can see links. Click Here To Register...]
Empfehle die Seite auch da ich sie selber häufiger verwende, wenn es um Java geht.

Habe einen Beispielcode geschrieben, der bei mir soweit funktioniert hat. Wenn es damit noch Probleme geben sollte meld dich hier oder per pm.

Code:
import java.util.ArrayList;
import java.util.List;

/**
 * Eine Beispielklasse zum Filtern von Links aus einer html-Seite
 * 
 * 12.12.2012
 * 
 * @author Shiru
 * 
 */
public class ExampleReg {

	/**
	 * Macht bisher nix
	 */
	public ExampleReg() {

	}

	/**
	 * Mit hilfe von RegEx wird ein pattern erstellt was zum Filter von Links
	 * innerhalb einer html seite verwendet werden kann. Spezieller filtert er
	 * alle Links innerhalb eines href-Attributes
	 * 
	 * @param text der zu filternde Text
	 * @return eine Liste aller gefundenen Links
	 */
	public List<String> filterAllHref(String text) {
		String pattern_regex = "(.+?)(href=\")(.+?)(\".*)";

		List<String> stringlist = new ArrayList<String>();

		String temp_str = "";
		do {
			temp_str = text.replace("\n", "").replace("\r", "")
					.replaceAll(pattern_regex, "$3");

			if (temp_str != "") {
				stringlist.add(temp_str);
			}
			text = text.replace("href=\"" + temp_str + "\"", "");
		} while (text.contains("href=\""));

		return stringlist;
	}

	/**
	 * Erstellt ein ExampleReg-Objekt und Filtert mit dessen Hilfe alle
	 * enthaltenden Links aus.
	 * 
	 * @param args
	 *            wird nicht verwendet
	 */
	public static void main(String[] args) {

		String text = "<a href=\"http://www.blubb.de\" />\n\r"
				+ "    <h1 id=\"header1\">asdfhref</h1>\n\r\n\r"
				+ "<a href=\"http://www.google.de\" />\n\r";

		List<String> stringlist = new ExampleReg().filterAllHref(text);
		for (String blubb : stringlist) {
			System.out.println(blubb);
		}
	}

}
Wenns dir soweit geholfen hat, die Psc bitte per pm ;D


MfG

Edit: Die Bedingung der While noch ein wenig angepasst. Hoffe jetzt is allet drinne :D
12/13/2012 15:54 NotEnoughForYou#4
Quote:
Originally Posted by Viper3001 View Post
@NotEnoughForYou
Das Beispiel das du gepostet hast würde jedes html attribut auch mit ausgeben z.B. id="blubb"

Glaube auch das deine Variante so nicht genau gewünscht war, da es auch kein regex verwendet, außerdem würde er bei dir nur den 1. Gefundenen eintrag ausgeben und nicht eine Liste aller Links. Seih mir nicht böse und siehe das bitte als konstruktive Kritik :D


So Zum Problem des Threadstarters:
Habe mich ein wenig schlau gemacht und auch diese Seite hier als Hilfe verwendet:
[Only registered and activated users can see links. Click Here To Register...]
Empfehle die Seite auch da ich sie selber häufiger verwende, wenn es um Java geht.

Habe einen Beispielcode geschrieben, der bei mir soweit funktioniert hat. Wenn es damit noch Probleme geben sollte meld dich hier oder per pm.

Code:
import java.util.ArrayList;
import java.util.List;

/**
 * Eine Beispielklasse zum Filtern von Links aus einer html-Seite
 * 
 * 12.12.2012
 * 
 * @author Shiru
 * 
 */
public class ExampleReg {

	/**
	 * Macht bisher nix
	 */
	public ExampleReg() {

	}

	/**
	 * Mit hilfe von RegEx wird ein pattern erstellt was zum Filter von Links
	 * innerhalb einer html seite verwendet werden kann. Spezieller filtert er
	 * alle Links innerhalb eines href-Attributes
	 * 
	 * @param text der zu filternde Text
	 * @return eine Liste aller gefundenen Links
	 */
	public List<String> filterAllHref(String text) {
		String pattern_regex = "(.+?)(href=\")(.+?)(\".*)";

		List<String> stringlist = new ArrayList<String>();

		String temp_str = "";
		do {
			temp_str = text.replace("\n", "").replace("\r", "")
					.replaceAll(pattern_regex, "$3");

			if (temp_str != "") {
				stringlist.add(temp_str);
			}
			text = text.replace("href=\"" + temp_str + "\"", "");
		} while (text.contains("href=\""));

		return stringlist;
	}

	/**
	 * Erstellt ein ExampleReg-Objekt und Filtert mit dessen Hilfe alle
	 * enthaltenden Links aus.
	 * 
	 * @param args
	 *            wird nicht verwendet
	 */
	public static void main(String[] args) {

		String text = "<a href=\"http://www.blubb.de\" />\n\r"
				+ "    <h1 id=\"header1\">asdfhref</h1>\n\r\n\r"
				+ "<a href=\"http://www.google.de\" />\n\r";

		List<String> stringlist = new ExampleReg().filterAllHref(text);
		for (String blubb : stringlist) {
			System.out.println(blubb);
		}
	}

}
Wenns dir soweit geholfen hat, die Psc bitte per pm ;D


MfG

Edit: Die Bedingung der While noch ein wenig angepasst. Hoffe jetzt is allet drinne :D
Bin davon ausgegangen, dass die Eingabe genausp aussieht wie in seinem Bsp.. Da das ganze aber vermutlich eh eine Hausaufgabe war hat sich das bestimmt erledigt.

Keine Sorge man lernt doch aus Kritik ;-). Java ist sowieso nicht mein Spezialgebiet :-).
12/16/2012 00:17 Viper3001#5
Falls du fragen in der Richtung hast kannste dich ja eh bei mir melden.

Davon abgesehen war der Themenstarter seit der Anfrage wohl nimma online. Mal abwarten, ob er sein Angebot auch einhält :D


MfG