regex-Pattern Ausdruck negieren

Status
Nicht offen für weitere Antworten.

sdt105

Mitglied
Hi,

ich habe folgende Methode geschrieben:

Code:
public static List<File> listFilesContainingPattern( List<File> filelist, String extensionPattern )
	{
		List<File> files = new ArrayList<File>( 1024 );
		
		Pattern p = Pattern.compile( extensionPattern, Pattern.CASE_INSENSITIVE ); 
		
		for (File file : filelist)
		{
			if (p.matcher(file.getName()).matches())
			{
				files.add( file );
			}
			
		}
				
		return files;
	}

Nun will ich mit der Methode alle Dateien einer Liste auflisten, die jpg-Dateien sind und NICHT das Datumsformat _JJJJ-MM-TT im Namen haben. Die jpg-Dateien kann ich ja erstmal auflisten. Aber ich weiß nicht, wie ich dann in der neuen Liste die Dateien ohne das Datumsformat raussuchen soll.

Code:
List<File> filesnew = ReadDrive.listFilesContainingPattern(files, ".*\\.jpg$");
List<File> filesnew2 = ReadDrive.listFilesContainingPattern(filesnew, ".*(!(_[0-9]{4}-[0-9]{2}-[0-9]{2})).*");

mit Ausrufezeichen, so wie in einer if-Abfrage funktioniert das nicht. Das ^ funktioniert ja auch nur in den eckigen Klammern...

Hat jemand ne Ahnung, wie man das lösen könnte?
 
hab mir die Frage gerade selbst beantwortet...

in der Methode einfach ein Ausrufezeichen in der if-Abfrage setzen um alles zu negieren. Allerdings brauche ich dann in meinem Programm 2 Methoden. Auf jeden Fall ist das aber eine Lösungsmöglichkeit.

Code:
public static List<File> listFilesNotContainingPattern( List<File> filelist, String extensionPattern )
	{
		List<File> files = new ArrayList<File>( 1024 );
		
		Pattern p = Pattern.compile( extensionPattern, Pattern.CASE_INSENSITIVE ); 
		
		for (File file : filelist)
		{
			if (!p.matcher(file.getName()).matches())
			{
				files.add( file );
			}
			
		}
				
		return files;
	}
 
wenn du eh matches nimmst kannst du auch gleich String#matches() nehmen (ruft zwar intern des gleiche auf is aber hübscher)

wobei das case_insensitive dann nicht berücksichtigt wäre (könntest du aber ins matches() pattern aufnehmen)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben