# Suche String Tutorial zu Suche&Ersetze Funktion von text



## PELLE (10. Mai 2006)

Hallo,

Ich habe eine .txt Datei in der Text gespeichert ist sowie mehrere Platzhaltervariablen wie "$Vorname$" , "$Name$", "$PLZ$" usw. Nun gebe ich in einer java application die verschiedenen Daten in textfields ein. Die Daten sollen dann entsprechend an die Positionen der Platzhaltvariablen gesetzt werden und dazu suche in ein Tutorial. Kennt da jemand ein gutes? I m grunde genommen nix anderes als die Search&Replace fkt. von Word/notepad!


----------



## bygones (10. Mai 2006)

google nach Regex / Regular Expressions suchen

z.b. http://www.javaregex.com/
http://java.sun.com/docs/books/tutorial/extra/regex/index.html


----------



## PELLE (10. Mai 2006)

deathbyaclown hat gesagt.:
			
		

> google nach Regex / Regular Expressions suchen
> 
> z.b. http://www.javaregex.com/
> java.sun.com/docs/books/tutorial/extra/regex/index.html



die site javaregex ist das die offiziele site dieser vorgefertigten funktionen(sind sie doch so weit ich das sehe oder?) ok seh gerade das ist im util java package drin , schön, dann muss ich da schon nix mehr ausdenken


----------



## byte (10. Mai 2006)

Der zweite Link ist offziell.


----------



## PELLE (15. Mai 2006)

deathbyaclown hat gesagt.:
			
		

> google nach Regex / Regular Expressions suchen
> 
> z.b. http://www.javaregex.com/
> http://java.sun.com/docs/books/tutorial/extra/regex/index.html



ähm mir hat jemand gesagt das kann ich genau so mit replace methode machen von String klasse...

replace("zieltext", "quelltext");

so nun habe ich in einer JTArea-instanz gennant "infoBereich" den Platzhalter "$name$" z.B. !

und der quelltext befindet sich in einer variablen genannt "nameNeu" !


replace("zieltext", "quelltext");

zieltext ist = "$name$"
quelltext ist = nameNeu

und instanz ist = infoBereich

wie wäre nun die replace methode auf die JTA-instanz bezogen? Ich meine replace geht da nur auf ein String und hat mit JTA nix zu tun...also müsste ich auf alle fälle die position des "$name$" suchen und dann wirds wieder komplizierter... aber mit regex geht das? einfach sagen suche den ausdruck "$name$" in der JTA-instanz und ersetze mit der variablen "nameNeu" ??


----------



## bygones (15. Mai 2006)

über getText den Inhalt der TextArea holen. Dann replace auf den Text anwenden und wieder per setText in die Area schreiben


----------



## meez (15. Mai 2006)

Hier hast du noch eine andere Art, wenn regexe zu langsam sind...Was aber ziemlich selten vorkommt...http://www.java-forum.org/de/viewtopic.php?p=128405


----------



## PELLE (15. Mai 2006)

deathbyaclown hat gesagt.:
			
		

> über getText den Inhalt der TextArea holen. Dann replace auf den Text anwenden und wieder per setText in die Area schreiben



deine Methode hört sich gut an auf den 1. Blick aber auf den 2. ist da ein logischer Fehler in meinen Augen...


Ich möchte ja nicht replace auf den kompletten Text anwenden sondern nur auf ein cookie in dem text namens $name$

habe mal deinen Vorschlag in code umgesetzt, aber die logik fehlt bzw. macht kein sinn 


```
public void cookieReplace()
      {
         String neuName = "Bernd";                            // neuer Name ist Bernd
         String quellText = nfoBereich.getText();         // der komplette JTA-instanz text wird in quelltext abgespeichert
         replace("$name",neuName);                          //der name "Bernd" ersetzt den Cookie "$name$" nur wo ist der
                                                                            // cookie positioniert bzw. angesiedelt?? es muss ja einen      
                                                                          //zusammenhang zwischen cookie und JTA-instanz geben...
         nfoBereich.setText(quellText);                     //der selbe eingelese text aus der JTA-inst. wird in quellText 
                                                                          //variable eingelesen, also hat sich nichts geändert!!!
      }
```


kannst mir folgen?

ok habe es so abgeändert aber es passiert nix :lol: 


```
String neuName = "Bernd";
         String quellText = nfoBereich.getText();
         quellText.replace("$name",neuName);
         nfoBereich.setText(quellText);
```


----------



## bygones (15. Mai 2006)

Strings sind immutable, d.h. unveränderlich. Jede Methode die eine String ändert liefert einen neuen String zurück, ergo

```
String text = area.getText();
text = text.replaceAll("$name$", "Bernd");
area.setText(text);
```



> ch möchte ja nicht replace auf den kompletten Text anwenden sondern nur auf ein cookie in dem text namens $name$


du musst den regex aber auf den gesamten Text loslassen, da du nicht weißt wo überall vorkommen des regex vorliegen.

Zu überlegen ist es beim "Befüllen" der area, irgenwo muss ja der Text herkommen, schon das replace zu machen.


----------



## PELLE (15. Mai 2006)

```
public void replaceCookies()
      {

         String neuName = "Bernd Maier GmbH";
         String quellText = infoBereich.getText();
         quellText.replaceAll("%COMPANY%C",neuName);
         infoBereich.setText(quellText);

      }
```

nach deinem vorschlag angepasst, geht aber nicht, nichts wird ersetzt!


----------



## PELLE (15. Mai 2006)

die JTA-instanz verändert sich dahingehend dass beim mausdrücken und aufrufen der  methode die komplette JTA-instanz nach unten scrollt, also wurde text eingefügt, aber nur der original??? den string "%company%C" gibt es , wird aber net ersetzt?


----------



## bygones (15. Mai 2006)

```
quellText.replaceAll("%COMPANY%C",neuName);
```
nochmal - Strings sind nicht zu verändern - dein code hat keinerlei auswirkungen. 
replaceAll liefert einen neuen String zurück

```
String neuerText = quellText.replaceAll("%COMPANY%C",neuName);
```


----------



## PELLE (15. Mai 2006)

ok kapiert jetzt geht es nur das problem ist jetzt, dass rechts von dem cookie ca. 30 blanks kommen und dann das zeilen ende mit diesen zeichen ".:" abgeschlossen wird. Wenn ich also jetzt diesen namen Bernd z.B. einfüge befindet sich auch kurz hinter dem namen bernd das zeichen ".:" soll aber net sein, das soll die pos. nicht verändern, hast du da ne ahnung? wie ich das bewerkstelligen kann?

so siehts aus:


```
.|                                 Bernd                               |.

und so müsste es sein
.|                                 Bernd                                      |.
```
<---einfach weiter rechts, da aber der name bernd kürzer ist als der cookie %company%C werden alle zeichen rechts davon herangezogen um die länge cookie_länge - bernd bzw. allgemein ( neuName)


----------



## André Uhres (16. Mai 2006)

PELLE hat gesagt.:
			
		

> ..einfach weiter rechts, da aber der name bernd kürzer ist als der cookie..


Du musst neuName auf die Länge von cookie ausdehen, falls neuName kürzer als cookie ist:

```
String blanks = "                                                        ";
        int endIndex = cookie.length() - neuName.length();
        neuName = neuName + blanks.substring(0, endIndex>0 ? endIndex : 0);
```


----------



## PELLE (16. Mai 2006)

André Uhres hat gesagt.:
			
		

> PELLE hat gesagt.:
> 
> 
> 
> ...



ok ich probiers später aus... bin grad im unterricht...

doch was mache ich wenn neuName > als cookie ist? dann wird der vertikale balken um x spalten (neuname-cookie) nach rechts verschoben und das soll ja auch net sein. Als müsste ich erstmal ne prüfung machen mit if wie sich  cookielänge zu neuname länge verhält ja? und je nach dem dann umsetzen damit der balken vertikal bleibt wo er ist!?


----------



## André Uhres (16. Mai 2006)

PELLE hat gesagt.:
			
		

> ..doch was mache ich wenn neuName > als cookie ist?..


Wenn das vorkommen kann, dann machst du es besser unabhängig von cookie:

```
String blanks = "                                                        ";
        neuName = neuName + blanks.substring(neuName.length());
```
*blanks *stellt dann die Spaltenbreite dar.


----------



## PELLE (16. Mai 2006)

André Uhres hat gesagt.:
			
		

> PELLE hat gesagt.:
> 
> 
> 
> ...


----------



## André Uhres (16. Mai 2006)

PELLE hat gesagt.:
			
		

> ..also ist obiger Vorschlag von dir unabhängig von der Größe von neuName sprich er kann kleiner/größer als der Cookie sein?


Ja.


			
				PELLE hat gesagt.:
			
		

> ..mit Spalten breite meinst du die insgesamte breite von
> .:                               Cookie                           :.          <-- das is bei dir die spaltenbreite?


Ich denke schon daß du die nehmen kannst. Kann natürlich auch grösser sein.
Probier's einfach mal aus. Damit das so funktioniert muss die Font natürlich monospaced sein, also z.B.:
Monospaced
Courier New
DialogInput
Lucida Console
...


----------



## PELLE (16. Mai 2006)

André Uhres hat gesagt.:
			
		

> PELLE hat gesagt.:
> 
> 
> 
> ...



yo also den font den ich nehme ich auf jedenfall fall jede char gleich groß sprich courier new!

und noch etwas ich war etwas verpeilt... sprich der string in der variable neuName ist auf jeden Fall IMMER größer als der Cookie!!!

Daraus schließe ich , dass der cookie-string durch den string in neuName ersetzt wird. Um die anzahl an blanks wie neuName größer ist als der cookie-string muss nun die rechte zeilengrenze ":." nach links gezogen werden, damit die Spaltengrenze rechts wieder stimmt!

so jetzt ist es richtig dargestellt!!!  

cookie z.b. "$www$" 

neuURL z.B. "www.neu.de"

"$www$" -  "www.neu.de" = Überhang an blanks der von der rechten Grenze ":." abgezogen werden muss. Nur dieses abziehen von 5 chars (obiges beispiel), weiß ich noch nicht wie ich das machen soll.


----------



## André Uhres (16. Mai 2006)

PELLE hat gesagt.:
			
		

> ..der string in der variable neuName ist auf jeden Fall IMMER größer als der Cookie..


Ich denke du musst einfach von einer maximalen Spaltenbreite ausgehen die du einmal festlegst.
Wie du diese maximale Breite errechnest musst du selbst wissen. 
Ich kenne ja nicht die möglichen Werte die da hinein müssen.
Den Rest hab ich eigentlich schon hier gesagt:
http://www.java-forum.org/de/viewtopic.php?p=190839#190839

Ach ja, du musst deinen Regex natürlich auch so machen, 
daß die Leerzeichen rechts vom Cookie mit ersetzt werden:

```
replaceAll("(?>\\$www\\$) *", neuName)
```
Erklärung zum Regex:
(?>\$www\$) *
Die Einheit $www$ muss zutreffen: (?>\$www\$)
Es müssen 0 oder mehr Leerzeichen folgen: « *»

Ich bin aber hier immer nur auf Vermutungen angewiesen. 
Am besten du postest einmal vorbildliche Beispieldaten mit denen man das alles testen kann.


----------



## PELLE (16. Mai 2006)

max. spalten breite ist bei spalte 80 in meinem bsp.

meinen regex??? replaceAll ist doch ne methode von string class und nicht von den regex??


----------



## André Uhres (16. Mai 2006)

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)


----------



## PELLE (16. Mai 2006)

ah i c ...  

Replaces each substring of this string that matches the given regular expression with the given replacement.

An invocation of this method of the form str.replaceAll(regex, repl) yields exactly the same result as the expression

    Pattern.compile(regex).matcher(str).replaceAll(repl)

jetzt hab ich ein knoten im kopf, bin zwar gut im english aber das soll mall ein nicht nativ verstehen...

gibt es irgendeine möglichkeit einem string zu sagen geh an die position in der txt datei? denn ich versteh immer noch nicht wie ich der begrenzung rechts sagen kann komme 10 spalten nach links zurück


----------



## André Uhres (16. Mai 2006)

Sry, ich werde langsam nervös, kann aber auch am Wetter liegen  :? 


			
				PELLE hat gesagt.:
			
		

> ..jetzt hab ich ein knoten im kopf, bin zwar gut im english aber das soll mall ein nicht nativ verstehen...


Daß das irgendetwas mit Regex zu tun hat verstehst du, nicht wahr? Darum ging's ja erstmal.


			
				PELLE hat gesagt.:
			
		

> gibt es irgendeine möglichkeit einem string zu sagen geh an die position in der txt datei? denn ich versteh immer noch nicht wie ich der begrenzung rechts sagen kann komme 10 spalten nach links zurück


Du sagst ja die Spalte sei 80 breit (Mist, du hast ja immer noch keine verbindlichen Testdaten geschickt  :cry: )
Dann müsste mein Code ja funzen, schon probiert? - Na, dann wird's aber langsam Zeit  
String har allerdings noch ein paar interessante Methödchen. Einfach mal die Doku lesen.
Ach ja du verstehst ja kein Englisch. Dann eben Javainsel, da müsste auch einiges darüber stehen  :### 
Und die Testdaten nicht vergessen! Ist wichtig


----------



## PELLE (16. Mai 2006)

ok kommt alles morgen abend oder donnerstag wenn ich zeit habe;-)


----------



## André Uhres (16. Mai 2006)

PELLE hat gesagt.:
			
		

> ok kommt alles morgen abend oder donnerstag wenn ich zeit habe;-)


Sehr gut. Lass dir ruhig Zeit. 
Kommt Zeit, kommt Rat


----------



## PELLE (18. Mai 2006)

ok hier ist der code und die datei angehängt, da da noch wegen der codepage andere classes benötigt werden um den ascii richtig darzustellen...

```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EtchedBorder;
import javax.swing.*;

public class RWindow extends JFrame implements ActionListener
{
      JTextArea infoBereich = new JTextArea();
      JScrollPane infoScrollLeisten = new JScrollPane(infoBereich);
      JFileChooser fc = new JFileChooser();
      JPanel panel = new JPanel();
      Font schriftArtTextArea = new Font("Courier New",Font.PLAIN,12);

      boolean Directory = false;
      private File file;
      private JButton bu = new JButton("File öffnen");
      private JTextField  versionNameTF = new JTextField("cro-20.zip");
      private JTextField  publishDateTF = new JTextField("12/05/2006");
      private JTextField  colorTF = new JTextField("16 Farben");
      private JTextField  wwwTF = new JTextField("http://www.chemical-reaction.de/");
      private JTextField  installationTF = new JTextField("Use our attached ascii viewer");
      private JTextArea   beschreibungTA = new JTextArea("greetings, description of ascii and aim of it \nHello,\n fellas how are you?");
      JScrollPane beschreibungSPane = new JScrollPane(beschreibungTA);
      
      
   public RWindow()
   {

      super("rip Mc dick");

      add(panel, BorderLayout.CENTER);
      panel.setLayout(null);
      panel.add(infoScrollLeisten);

      infoScrollLeisten.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
      infoScrollLeisten.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
      infoBereich.setFont(schriftArtTextArea);

      infoBereich.setBackground(Color.black);
      infoBereich.setForeground(Color.white);

      infoBereich.setBorder( new EtchedBorder(Color.lightGray,Color.darkGray));

      infoScrollLeisten.setBounds(0,0,577,700);
      bu.setBounds(600, 670, 100, 25);

      // Eingabefelder für die .txt datei vorlage
      versionNameTF.setBounds(600,180,300,30);

      publishDateTF.setBounds(600,220,300,22);
      colorTF.setBounds(600,242,300,22);
      installationTF.setBounds(600,264,300,22);
      
      wwwTF.setBounds(600,330,300,30);
      beschreibungTA.setBounds(600,400,300,270);


      bu.addActionListener(this);

      panel.add(bu);
      panel.add(versionNameTF);
      panel.add(publishDateTF);
      panel.add(colorTF);
      panel.add(wwwTF);
      panel.add(installationTF);
      panel.add(beschreibungTA);
   }

   public void actionPerformed(ActionEvent aevt)
   {
     infoBereich.setText("");
     dateiLesen();
   }

   public void dateiLesen()
   {
      try
      {
        File tmp = new File(System.getProperty("user.dir"));
        fc.setCurrentDirectory(tmp);
        int selection = fc.showOpenDialog(this);
        if(selection == JFileChooser.APPROVE_OPTION)
        {
          file = fc.getSelectedFile();
        }
        String line;
        BufferedReader datei_text = new BufferedReader(new InputStreamReader(new FileInputStream(file),"CP437"));


        while((line = datei_text.readLine())!= null )
        {
          infoBereich.append(line + "\r\n");
        }
        datei_text.close();

      }

      catch (FileNotFoundException e)
      {
         System.out.println("Datei nicht gefunden");
      }
      catch (IOException e)
      {
         System.out.println("Fehler: "+e.getMessage());
      }

   }

   public static void main(String args[] )
   {
      UIManager.put("swing.boldMetal", Boolean.FALSE);
      RWindow Fenster = new RWindow();
      Fenster.setSize(1024,768);
      Fenster.setLocationRelativeTo(null);
      Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Fenster.setResizable(true);
      Fenster.setVisible(true);

   }
}
```

Da ist alles drin:

http://www.sendspace.com/file/p3qq66

zum Code:

einfach auf file öffnen , dann in den ordner ascii_template und die .txt datei laden. Diese wird links in der jtarea angezeigt, rechts stehen beispiel texte in the jtfields, die links in die txt datei richtig eingefügt werden müssen ohne das das ascii layout schaden nimmt eingefügt werden müssen. Sprich wie vorher besprochen,

muss sich der rechte rand der textdatei durch ein "." oder "|" markiert dem eingefügten text anpassen, so dass nach hinzugabe der jtfield info das layout bzw. die grenze nicht verschoben ist!


----------



## PELLE (18. Mai 2006)

```
String blanks = "                                                        ";
neuName = neuName + blanks.substring(neuName.length());
```

obiges hast du geschrieben:

nochmals zur Verdeutlichung...

der neuName ist immer größer als das Cookie sprich Cookie - neuName = zuviele_Blanks

daraus folgt:  ---->>>  neuName = neuName - blanks.substring(zuviele_Blanks.length());   // damit ziehe ich von 

neuName die Anzahl der Leerzeichen ab die neuName vs. Cookie zuviel hat, was hälst du davon? bzw. kann ich einen 

String überhaupt abziehen ist viel mehr die Frage?!



Ok den folgenden code habe ich jetzt eingebaut, ausgeührt und bekomme natürlich Fehler...:


```
public void replaceCookies()
{
      
          String blanks = "                                              ";
           String zuviele_Blanks;
           String neuName;
           String Cookie1 = "%COMPANY%C";
           zuviele_Blanks = rlsFilenameTF.getText().length() - Cookie1;
           neuName = rlsFilenameTF.getText() - blanks.substring(zuviele_Blanks.length());

           String quellTextInstallCompany = nfoBereich.getText();
           String neu_quellTextCompany = quellTextInstallCompany.replaceAll("%COMPANY%C",neuName);
           nfoBereich.setText(neu_quellTextCompany);

}
```


Fehlermeldungen, wobei beide Fehlermeldungen, auf das subtrahieren zurückzuführen sind...



```
mainWindow.java:301: operator - cannot be applied to int,java.lang.String
           zuviele_Blanks = rlsFilenameTF.getText().length() - Cookie1;
                                                             ^
mainWindow.java:302: cannot find symbol
symbol  : variable zuviele_Blacks
location: class mainWindow.ReleasePanel
           neuName = rlsFilenameTF.getText() - blanks.substring(zuviele_Blacks.length());
                                                                ^
3 errors
```


Ich habe auch versucht an das Cookie1 length dranzuhängen ala Cookie1.length() aber dennoch fehlermeldung wie:


```
mainWindow.java:301: incompatible types
found   : int
required: java.lang.String
           zuviele_Blanks = rlsFilenameTF.getText().length() - Cookie1.length();
```

ok die eine fehlermeldung habe ich behoben...

```
int zuviele_Blanks = rlsFilenameTF.getText().length() - Cookie1.length();
```

die variable zuviele_Blanks muss integer sein!

bleibt nur noch diese Meldung:


```
mainWindow.java:302: int cannot be dereferenced
           neuName = rlsFilenameTF.getText() - blanks.substring(zuviele_Blanks.length());
                                                                              ^
```


----------



## André Uhres (18. Mai 2006)

```
String blanksNeuName = "                                                                    ";//68
            String neuName = wwwTF.getText();
            neuName = neuName + blanksNeuName.substring(neuName.length());
            while((line = datei_text.readLine())!= null ) {
                line = line.replaceAll("(?>\\%www\\%) *", neuName);
                infoBereich.append(line + "\r\n");
            }
```


----------



## PELLE (18. Mai 2006)

du hast String line; vergessen;-)

wieso arbeitest du denn mit einer datei? (datei_text) oder was soll das sein? ich möchte doch nur den text in der JTAinstanz verändern!

zudem wenn du die blanks zu dem neuen namen hinzuaddierst, dann trifft ja genau das Gegenteil ein was ich wollte sprich die grenze rechts mit dem balken wird noch weiter rechts steht wie eh schon ist... 

das ersetzen geht schon nur warum muss da ne datei im spiel sein? kann man doch alles über JTA-instanz machen, zudem kommen ja noch 5 andere dinge die ersetzt werden müssen und das wichtigste, wie ich sagte die blanks werden zu neuName hinzuaddiert und bewirken genau das gegenteil was ich will, nämlich das die rechte Grenze zu dem neuName herangezogen wird, du schiebst die grenze aber nach rechts :meld:  :###  :noe:  :wink:


----------



## André Uhres (20. Mai 2006)

PELLE hat gesagt.:
			
		

> du hast String line; vergessen..


Das ist *DEIN* Code. Hab nur ergänzt. Funzt perfekt.


----------



## PELLE (20. Mai 2006)

solangsam blick ich s nimmer je mehr ich schreib und probiere desto unsicherer werde ich wegen jedem furz...

kannst du mir bitte den kompletten code geben, der fkt.?


andersrum gesagt...

ich möchte nun erstmal nur 1 zeile sprich ein inhalt eines Textfields da hinsetzen, wo das "%www%" ist, warum geht folder code nicht??? ich bekomme zwar keine error meldung, aber der cookie "%www%" wird nicht ersetzt?


```
String line = "";
            String neuName = homepageTF.getText(); //textfeld mit www url
            line = line.replaceAll("(?>\\%www\\%) *", neuName);
            nfoBereich.append(line + "\r\n"); // nfoBereich ist die jta-instanz wo die www-url rein muss
```


----------



## André Uhres (20. Mai 2006)

Letzter Versuch (Manno, so geduldig war ich schon lange nicht mehr):
Dies: http://www.java-forum.org/de/viewtopic.php?p=191908#191908 
ersetzt die Zeilen 107-110 von hier: http://www.java-forum.org/de/viewtopic.php?p=191617#191617
Die Testdaten sind hier: http://www.sendspace.com/file/p3qq66


----------



## PELLE (20. Mai 2006)

http://www.java-forum.org/de/viewtopic.php?t=31979

ich habs doch schon lange ^^


----------



## PELLE (20. Mai 2006)

> ersetzt die Zeilen 107-110 von hier: http://www.java-forum.org/de/viewtopic.php?p=191617#191617



und woher soll ich das wissen mit dem ersetzt?


----------



## André Uhres (20. Mai 2006)

PELLE hat gesagt.:
			
		

> http://www.java-forum.org/de/viewtopic.php?t=31979
> 
> ich habs doch schon lange ^^


Wieso machst du zwei Threads auf für die gleiche Sache?
Und nirgends einen Haken?
(O Gott, mach dass er wenigstens das versteht).



			
				PELLE hat gesagt.:
			
		

> > ersetzt die Zeilen 107-110 von hier: http://www.java-forum.org/de/viewtopic.php?p=191617#191617
> 
> 
> 
> und woher soll ich das wissen mit dem ersetzt?


Also dass du den Beitrag nicht verstehen würdest, damit hatte ich ja schon gerechnet. 
War ja bis jetzt immer so. Aber dass es so krass werden würde, hätte ich nun doch nicht gedacht.
Drei Links auf einmal war wohl zuviel für dich.


----------

