# http:// in Link umwandeln



## Guest (28. Nov 2006)

Hallo,

Also ich speicher einen Text in den String msg:


```
String msg;
msg = "Test Test Test Test [url]http://www.test.de[/url] Test Test Test [url]www.test.de[/url] Test Test";
```

Nun möchte ich http://www.test.de umwandeln in einen Hyperlink
http://www.test.de das gleiche auch bei www.test.de.

Gibt es eine Möglichkeit in Java, wenn ja, wie?[/code]


----------



## Teo (28. Nov 2006)

Ups war nicht eingeloggt, nochmal:

Also ich speicher einen Text in den String msg:


```
String msg;
msg = "Test Test Test Test [url]http://www.test.de[/url] Test Test Test [url]www.test.de[/url] Test Test";
```

Nun möchte ich http://www.test.de umwandeln in einen Hyperlink
http://www.test.de das gleiche auch bei www.test.de.

Gibt es eine Möglichkeit in Java, wenn ja, wie?


----------



## SlaterB (28. Nov 2006)

du suchst in dem String nach http://,
fügst davor <a href=" ein,
suchst bis zum nächsten Leerzeichen, kopierst die Adresse,
fügst nach der Adresse "> ein,
dann noch mal die Adresse
und am Ende </a>

könnte nicht einfacher sein


----------



## Teo (28. Nov 2006)

Also das heisst ich muss mit einer while() Schleife arbeiten , indexof() und substring()?

Geht es auch anderster?


----------



## Jockel (28. Nov 2006)

Du könntest auch mit regulären Ausdrücken arbeiten. Ob das aber einfacher ist, wage ich mal zu bezweifeln.


----------



## miketech (28. Nov 2006)

Hi,

solltest nur aufpassen, dass Du nicht in einer Endlosschleife landest, weil Du ja http:// durch <a href="http:// ersetzt und dann vielleicht irgendwann bei <a href="<a href="http://....  landest.

Gruß

Mike


----------



## Teo (28. Nov 2006)

Hallo,

also hab es jetzt so gemacht:


```
public String link(String msg) {
    String Link = "<a href=\"http://127.0.0.1:8080/redirect?url=";
    if(msg.indexOf(" ") != -1)
       msg = msg.substring(0, msg.indexOf(" ")) + " " + msg.substring(msg.indexOf(" ") + 1, msg.length());
    String s2 = "";
    String s3 = msg;
    s2 = "http://";
    if(msg.toLowerCase().indexOf(s2) != -1)
       msg = "";
    while(s3.toLowerCase().indexOf(s2) != -1) {
      msg = msg + s3.substring(0, s3.toLowerCase().indexOf(s2));
      s3 = s3.substring(s3.toLowerCase().indexOf(s2) + s2.length(), s3.length());
      String s4;
      if(s3.toLowerCase().indexOf(" ") != -1) {
        s4 = s3.substring(0, s3.toLowerCase().indexOf(" "));
        s3 = s3.substring(s3.toLowerCase().indexOf(" ") + 1, s3.length());
      }
      else {
        s4 = s3.substring(0, s3.toLowerCase().length());
        s3 = "";
      }
      msg = msg + Link + "http://" + s4 + "\" target=\"_blank\">" + "http://" + s4 + "</a> ";
    }
    return msg;
  }
```

Funktionieren tut er nur möchte ich von euch wissen ob manches überflüssig ist oder ob ein Fehler drinne habe.

MFG Teo


----------



## SlaterB (28. Nov 2006)

wieso so viele toLowerCase()-Aufrufe?
kannst du nicht einmal toLowerCase() speichern, 
z.B. s3 scheint doch immer toLowerCase() zu sein?

und warum
s3.toLowerCase().indexOf(" ")
oder
s3.toLowerCase().length()

da macht das doch wenig Sinn,

---------

falls das ganze oft/ mit großen Strings durchgeführt wird:
mit StringBuffer statt Strings wirds oft deutlich performanter


----------



## Teo (28. Nov 2006)

Hallo,

hab diesen Codeschnippsel von von einem anderen Programm , aber irgendwie funktioniert es ned so. Habt ihr vieleicht ein anderes Beispiel? Etwas kürzer und übersichtlicher?


----------



## SlaterB (28. Nov 2006)

ich persönlich nicht, helfe dir aber gerne bei konkreten Fragen,

mein wertvoller Tipp daher:
beschreibe deine Probleme mit anderen Worten als 'irgendwie funktioniert es ned so'


----------



## Teo (28. Nov 2006)

Also als erstes hat es geklappt das der String nach der Url ausgegeben wird, nun gibt er es so aus: Test Test Test Test http://www.test.de <- hier schneidet er ab.


----------



## miketech (28. Nov 2006)

Hi nochmal,

was spricht denn eigentlich gegen reguläre Ausdrücke? Hab das hier mal zusammengebaut:


```
public String replace(String toReplace) {
                String regex = "http://(\\w*)";
                String replace = "<a href=\"http://$1\">http://$1</a>";

                return toReplace.replaceAll(regex, replace);
        }
```

Das ganze läuft so: Es sucht nach Strings mit http://ZEICHENKETTE. Diese ZEICHENKETTE kann in "replace" mit $1 wieder eingesetzt werden.

Gruß

Mike


----------



## Teo (28. Nov 2006)

Das nenn ich mal ziemlich kurz. Danke dir. Muss nur noch den passenden regex dazu finden, oder hast du noch einen passenden regex, denn er ersetzt nur http://www in einen link

lg Teo


----------



## miketech (28. Nov 2006)

Ah richtig, vergessen 

String regex = "http://(\\S*)";

Gruß

Mike


Edit: Das hier ist vielleicht hierzu interessant: http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html


----------



## Teo (29. Nov 2006)

Danke dir, werde mir das mit dem pattern mal genauer anschauen.

MFG Teo


----------

