# String mit Matcher.find durchsuchen und ausgeben



## Sinatra (23. Jan 2013)

Hallo.

Ich möchte gerne einen String, welcher aus einer langen Zeile besteht, nach bestimmten Kriterien durchsuchen. Dieses innerhalb einer Methode, welche einen String Returned.

Es klappt soweit auch, jedoch bekomme ich nur die erste Zeile "ausgespuckt"- 

Hier der Code: 


```
public static String felderRoh() {
		String t = null;
		 String s = Auslesen.lesen(); // Hier wird der String eingelesen
		Matcher matcher = Pattern.compile( "<SUCHKRITERIEN>").matcher( s );
			while ( matcher.find() ) {
				return matcher.group();
			}
		return t;
		
	 	}
```

Wenn ich das ganze als Main Methode laufen lasse, und dann anstelle des returns eine Bildschirmausgabe via

```
System.out.printf(matcher.group(), matcher.start(), matcher.end());
```

schreibe, so habe ich genau das Ergebnis das ich haben möchte.

Wie kann ich denn diese .start und .end Operatoren in meinen Code einbauen? 

Oder muss ich es ganz anders machen?

Danke!


----------



## Timothy Truckle (23. Jan 2013)

Sinatra hat gesagt.:


> Wenn ich das ganze als Main Methode laufen lasse, und dann anstelle des returns eine Bildschirmausgabe via
> 
> ```
> System.out.printf(matcher.group(), matcher.start(), matcher.end());
> ...




```
Matcher matcher = Pattern.compile( "(<SUCHKRITERIEN>)").matcher( s );
            while ( matcher.find() ) {
                return matcher.group(); // hier wird die Methode und damit die Schleife verlassen!!!!
```
Du musst die Ergebnisse in einer [JAPI]List[/JAPI]<String> sammeln und diese Liste zurückgeben.

BTW: ein 
	
	
	
	





```
null
```
 zurückzugeben ist gaaaanz bööööse!!!

In Deinem Fall wäre eine leere Liste als Rückgabewert angebracht. 

bye
TT


----------



## SlaterB (23. Jan 2013)

es scheint hier eher gemeint zu sein, alle Suchergebnisse zusammenzufassen, die Schleife nicht beim ersten find() zu beenden,
dafür kann man z.B. pro Schleifendurchlauf einen String zusammenstellen und diesen auf einen Gesamt-String/ StringBuilder hinzufügen,
am Ende den Gesamtstring zurückgeben


----------



## Sinatra (23. Jan 2013)

Hallo,

danke soweit für die Antworten.

Wenn ich bei


```
return matcher.group(1);
```

Die eins eingefügt habe, erhalte ich folgende Fehlermeldung:

Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1
	at java.util.regex.Matcher.group(Unknown Source)
	at FileWandler.wandeln.felderRoh(wandeln.java:20)
	at FileWandler.wandeln.main(wandeln.java:31)


----------



## faetzminator (23. Jan 2013)

Wie kommst du darauf, da eine 1 einzufügen? Warscheinlich hast du keine Groups (abgesehen von 0) in deinem Regex.
Machs einfach so:

```
final List<String> result = new ArrayList<String>();
while (matcher.find()) {
    result.add(matcher.group());
}
return result;
```


----------



## Sinatra (23. Jan 2013)

Super, das ganze in eine Liste einfügen und ausgeben, das hat geklappt!

Jetzt habe ich als Ergebnis: "[Listenelement1=Suchergebnis1, Listenelement2=Suchergebnis2 usw... ]"


Wenn es jetzt noch eine Möglichkeit gibt, die Listenelemente ohne die Klammern, und einzeln auszugeben (evtl zurück in einen String zu wandeln) wäre diese Lösung perfekt.

Danke!


----------



## Timothy Truckle (23. Jan 2013)

Sinatra hat gesagt.:


> Hallo,
> 
> danke soweit für die Antworten.
> 
> ...


Klar, die Änderung macht nur zusammen mit der Änderung am Pattern Sinn, wobei mit im nachhinein aufgefallen ist, dass Du ja eh den gesamten PatternString haben wolltest.

Also nimm erstmal die 
	
	
	
	





```
1
```
 wieder raus.

bye
TT


----------



## SlaterB (23. Jan 2013)

Sinatra hat gesagt.:


> Wenn es jetzt noch eine Möglichkeit gibt, die Listenelemente ohne die Klammern, und einzeln auszugeben (evtl zurück in einen String zu wandeln) wäre diese Lösung perfekt.


for-Schleife über die Liste


----------

