# String + Platzhalter



## the0MIKE (12. Okt 2012)

Hi Leute,

ich belästige euch jetzt damit weil ich einfach nichts dazu finde.

Da ich leider nicht weiß wie ich danach suchen soll, bekomme ich dementsprechend auch zu keiner lösung...

Wenn ich z.B. einen String auf ein Wort prüfe, ob es vorhanden ist, ich jedoch nur den Anfang vom word kenne, wie setzte ich einen Platzhalter davür?

Dachte eig. "wort*", und hatte auch in erinnerung das * für mehrerer Zeichen und ? für ein zeichen stehen.
Zudem hatte ich in erinnerung das es sich dabei um eine Wildcard handelt. Wenn ich danach aber suche bekomme ich etwas andereres und bei einer abfrage ob "wort*" vorkommt versteht er das nicht...

Hoffe auch hilfe auch wenn sie recht einfach zu lösen ist.



Gruß,
Mike


----------



## Gast2 (12. Okt 2012)

Du willst alle Wörter die mit Wort anfangen durch einen anderen String ersetzen?


```
String text = "Dies ist ein Wort mit vielen Wortblub und Wortblas.";

text = text.replaceAll("Wort[\\S]*", "XXX");
```


----------



## Kiri (12. Okt 2012)

Wie wäre es mit der Methode startsWith(String prefix) der Klasse String?

Hier die Doc: startsWith(String prefix)


----------



## the0MIKE (12. Okt 2012)

oh vergessen genau zu erwähnen was ich eigentlich will ^^

Also ich prüfe gerade mit Selenium ob ein bestimmtes Element(gefunden per ID) im Sourcecode einer seite auftaucht.
Da es z.B. "wert-oben", "wert-rechts", und "wert-center" gibt, würde ich gerne das in eine abfrage packen.

also von wegen 

```
if(driver.findElement(By.id("wert-*"){
//mach etwas
}
```

also praktisch ein wort suchen, das immer das gleiche enthält, aber zu einem teil unterschiedlich sein kann.


----------



## Kjubert (12. Okt 2012)

naja also das könntest du mit 
	
	
	
	





```
String.indexOf(wort, startIndex)
```
 machen.
Hab da mal was gebastelt:

Die Methode:


```
public static List<Integer> findWord (String stringToSearch, String wordToFind){
	List<Integer> indexList = new ArrayList<Integer>();
	stringToSearch = stringToSearch.toLowerCase();
	wordToFind = wordToFind.toLowerCase();
	int currentIndex = -1;
	
	do {
		currentIndex = stringToSearch.indexOf(wordToFind, currentIndex+1);
		if (currentIndex >= 0) indexList.add(currentIndex);
	} while (currentIndex >= 0);
	
	return indexList;
}
```

gibt beim Aufruf


```
String s = "Du, Mama, manche Malocher tragen Manschettenknöpfe!";
System.out.println(findWord(s, "Ma"));
```

folgendes aus:


```
[4, 6, 10, 17, 33]
```

...wenn die Liste leer ist, gibts das halt nicht.
Kannst das ja auch abspecken, falls du nur wissen willst, ob der String überhaupt vorkommt.

[EDIT]
Mir fällt grad was auf: Der gesuchte String darf nicht an Index 0 sein, also ganz am Anfang - dann findet die Methode den nicht. Aber das frickelste dir schon noch zurecht, hm? 
[/EDIT]

[EDIT]
EDIT 2: Schon verbessert! Findet jetzt alles!
[/EDIT]


----------



## the0MIKE (12. Okt 2012)

Erstmal Danke 

Aber das ist mir alles zu Kompliziert, also nicht das ich es nicht verstehe, ich will nur keine Function dafür ausführen.

Also wie gesagt es geht ja nicht wirklich darum herauszufinden ob das Wort im String vorkommt (naja eigentlich schon ) sondern mehr darum das ich mehr als ein Wort habe, das ich auf vorhandensein prüfen möchte. Bei dem wort ist einmal etwas festes das immer gleich bleibt und einmal etwas mehr oder weniger dynamisches.

Also nochmal 


```
String $dynamischeswort = "immer unterschiedlich";
String $fertigerstring = "festeswort("+$dynamischeswort+")";

if($fertigerstring == "festeswort*"){
//tu was
}
```

das * ändert sich immer und steht für das dynamische .
da gibt es doch sicher ein zeichen für das man dafür setzten kann


----------



## Kjubert (12. Okt 2012)

Du machst sonst eher PHP, was? 

Aber genau das kann doch String.indexOf:


```
if (fertigerstring.indexOf(festeswort) > -1){
     //...
}
```

Probiers aus.

[EDIT]
Bloß keine Sternchen! 
[/EDIT]


----------



## bone2 (12. Okt 2012)

was machen die $ zeichen an deinen variablennamen?
strings sind objekte, da hat == nix zu suchen

lösung wurde nun schon mehrmals genannt


```
System.out.println("festerTeil(salat)".matches("festerTeil[\\S]*"));
        System.out.println("festerTeil(salat)".startsWith("festerTeil"));
        System.out.println("festerTeil(salat)".contains("festerTeil"));
        System.out.println("festerTeil(salat)".indexOf("festerTeil") > -1);
```


----------

