wake-up-neo.net

Unzulässiges Zeichen in Dateiname ersetzen

In Java habe ich einen Dateinamen-String. Dort möchte ich alle unzulässigen Zeichen durch '_' ersetzen, aber nicht a-z, 0-9, -, . und _

Ich habe folgenden Code ausprobiert: Aber das hat nicht funktioniert!

myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
44
bbholzbb

Sie müssen alles außer [a-zA-Z0-9.-] ersetzen. Der ^ in den Klammern steht für "NOT".

myString = myString.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");
84
poitroae

Wenn Sie nach Optionen auf der Windows-Plattform suchen, können Sie unter Lösung versuchen, alle gültigen Zeichen außer "\ /: *?" <> | "Im Dateinamen zu verwenden.

fileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_");
16
Prakash

Halte es einfach.

myString = myString.replaceAll("[^a-zA-Z0-9.-]", "_");

http://ideone.com/TINsr4

13
Matt Ball

Noch einfacher

myString = myString.replaceAll("[^\\w.-]", "_");

Vordefinierte Zeichenklassen:

  • \w Ein Word-Zeichen: [a-zA-Z_0-9]
6
IvanRF

Ich weiß, dass es hier bereits einige Antworten gab, aber ich möchte darauf hinweisen, dass ich die gegebenen Vorschläge etwas ändern musste.

filename.matches("^.*[^a-zA-Z0-9._-].*$")

Dies war, was ich für .matches in Java verwenden musste, um die gewünschten Ergebnisse zu erzielen. Ich bin nicht sicher, ob dies zu 100% korrekt ist, aber so funktioniert es für mich. Es würde true zurückgeben, wenn es auf ein anderes Zeichen als a-z A-Z 0-9 (.) (_) Und (-) stößt.

Ich würde gerne wissen, ob meine Logik hier fehlerhaft ist.

In den vorigen Antworten habe ich einige Diskussionen darüber gesehen, was entgehen sollte oder nicht. In diesem Beispiel bin ich davongekommen, ohne irgendetwas zu entkommen, aber Sie sollten das Minuszeichen (-) ausschließen, um sicher zu sein, da es Ihren Ausdruck "bricht", es sei denn, er befindet sich am Ende der Liste. Ein Punktzeichen muss nicht innerhalb der ([]) eckigen Klammern, wie es scheint, entkommen werden, aber es wird Ihnen nicht schaden, wenn Sie ihm entkommen.

Weitere Informationen finden Sie unter Java Patterns .

1
Atspulgs

Wenn Sie mehr als [A-Za-z0-9] verwenden möchten, überprüfen Sie MS Naming Conventions und vergessen Sie nicht, "... Zeichen herauszufiltern, deren Ganzzahldarstellungen im Bereich von 1 bis 31 liegen , ... ".

0
wandlang