public static HashMap < String , String > find ( HashMap < String , String > props , String path ) { // Kein Pfad angegeben. Also treffen alle. if ( path == null || path . length ( ) == 0 ) return props ; // Die neue Map fuer die naechste Runde HashMap < String , String > next = new HashMap <> ( ) ; String [ ] keys = path . split ( "\\." ) ; String key = keys [ 0 ] ; boolean endsWith = key . startsWith ( "*" ) ; boolean startsWith = key . endsWith ( "*" ) ; key = key . replace ( "*" , "" ) ; Iterator < String > e = props . keySet ( ) . iterator ( ) ; while ( e . hasNext ( ) ) { String name = e . next ( ) ; String [ ] names = name . split ( "\\." ) ; if ( startsWith && ! endsWith && ! names [ 0 ] . startsWith ( key ) ) // Beginnt mit? continue ; else if ( ! startsWith && endsWith && ! names [ 0 ] . endsWith ( key ) ) // Endet mit? continue ; else if ( startsWith && endsWith && ! names [ 0 ] . contains ( key ) ) // Enthaelt? continue ; else if ( ! startsWith && ! endsWith && ! names [ 0 ] . equals ( key ) ) // Ist gleich? continue ; // Wenn wir einen Wert haben, uebernehmen wir ihn in die naechste Runde. // Wir schneiden den geprueften Teil ab String newName = name . substring ( name . indexOf ( "." ) + 1 ) ; next . put ( newName , props . get ( name ) ) ; } // Wir sind hinten angekommen if ( ! path . contains ( "." ) ) return next ; // naechste Runde return find ( next , path . substring ( path . indexOf ( "." ) + 1 ) ) ; }
Sucht in props nach allen Schluesseln im genannten Pfad und liefert sie zurueck .