1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
313
313
EMPFEHLEN
-
Hi Leute,
grundlegend möchte ich aus einer gegebenen Bezeichnung eine gültige Windows Dateibezichnung erstellen. Klar man könnte alle ungültigen Zeichen durch String.replaceAll() elliminieren, vielleicht gibts ja auch einen schickeren Weg mittels Pattern zumal ich ja die die Dateinamen auch wieder zurück wandeln muss. Ensprechend Windows müsste ja folgende Ersatzregeln gelten:
\ -> §
/ -> %
: -> &
* -> °
? -> ~
" -> `
< -> }
> -> {
| -> ´
Die anderen Zeichen sind willkürlich gewählt. Vielleicht fallen euch ja noch bessere ein.
Gruß Jan
-
13.07.11 16:24 #2
Wenn ich das richtig verstehe willst du anhand eines einzigen Ausdruckes sagen:
Wenn du Suchzeichen 1 findest, dann ersetze es mir durch das Ersatzzeichen 1
Wenn du Suchzeichen 2 findest, dann ersetze es mir durch das Ersatzzeichen 2
...
Mir persönlich ist kein Weg bekannt. Ich denke du kommst um ein eigenes Stückchen Code nicht vorbei, aber das ist in meinen Augen auch nicht schwierig (4 Zeilen Code?!). Viel Glück!
Edit: ich muss mich korrigieren, ich glaube es gibt doch eine Möglichkeit, welche ich jedoch nie selbst ausprobiert habe. Mir ist eingefallen, dass mir StringUtils schon des öfteren einige Zeilen Code erspart hat und tatsächlich ich habe etwas gefunden, was dir weiterhelfen könnte:
http://commons.apache.org/lang/api-2....String[])Geändert von HonniCilest (13.07.11 um 16:33 Uhr)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
13.07.11 17:02 #3SE Tutorials.de Gastzugang
@Honni
Wenn du nicht den Link gepostet hättest wäre ein Hinweis das SwinUtils zur ApacheCommons-Lib gehört nicht schlecht gewesen.
-
Genau richtig. ja mit rplaceall wärens ja mindestens 8 zeilen gewesen -> eins für jedes zeichen. und dann noch mal das ganze wieder in die andere richtung. is ja auch immer ne sache der performance. deswegen wollt ich einen einfacheren performanteren weg haben. ich versuchs mal mit der lösung im link.
danke
-
13.07.11 20:52 #5SE Tutorials.de Gastzugang
String.replaceAll() wäre eine schlechte Wahl gewesen weil replaceAll() einen Regulären Ausdruck verlangt. Wenn überhaupt wäre hier String.replace() wohl besser.
-
Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
13.07.11 21:42 #7SE Tutorials.de Gastzugang
Naja gut ... nur ich hab mich auch schon selbst ertappt wie man sich bei RegEx verrennen kann weil man vergessen hat das eine Methode eine RegEx verlangt und keine CharSequenz. Auch ist der Name irreführend. Das ALL rühert vermutlich daher das eben ALLE Sub-Strings auf die die RegEx zutrifft ersetzt.
-
Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
14.07.11 09:47 #9Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
habs jetzt so gelöst:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
private static String[] validChars = new String[] { "§", "%", "&", "°", "~", "`", "{", "}", "´" }; private static String[] invalidChars = new String[] { "\\", "/", ":", "*", "?", "\"", "<", ">", "|" }; public static enum ChangeFormat { WINDOWS_FILENAME, ORIGINAL_FORMAT; } // private static String validPattern = "*[§%&°~`{}´]"; // private static String invalidPattern = "*[*\\/:*?\"<>|]"; /** * Sonderzeichen die nicht als Dateiname zulässig sind werden in zulässige * Zeichen nach folgenden Regeln umgewandelt. * * <pre> * \ -> § * / -> % * : -> & * * -> ° * ? -> ~ * " -> ` * < -> } * > -> { * | -> ´ * </pre> * * @param bean * @param version * @return * @return */ public static String replace(String text, ChangeFormat change) { if (change.equals(ChangeFormat.WINDOWS_FILENAME)) { for (int i = 0; i < validChars.length; i++) { String newStr = validChars[i]; String oldStr = invalidChars[i]; text = text.replaceAll(oldStr, newStr); } } else if (change.equals(ChangeFormat.ORIGINAL_FORMAT)) { for (int i = 0; i < validChars.length; i++) { String newStr = invalidChars[i]; String oldStr = validChars[i]; text = text.replaceAll(oldStr, newStr); } } return text; }
Ähnliche Themen
-
public String replaceAll(String regex, String replacement) und das $-Zeichen
Von takidoso im Forum JavaAntworten: 5Letzter Beitrag: 22.11.10, 17:31 -
[Batch] String replacement / DIR Funktion ändern
Von Blacker im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 29.09.08, 19:27 -
String Pattern / Zeichen loeschen
Von MyD im Forum JavaAntworten: 9Letzter Beitrag: 17.05.08, 14:03 -
Mehrfaches Character-Replacement in einem String - Effizienz?
Von dlk94mylis im Forum JavaAntworten: 3Letzter Beitrag: 08.05.07, 09:36 -
String mittels regex bearbeiten
Von Samuel im Forum PHPAntworten: 5Letzter Beitrag: 02.10.03, 14:09





Zitieren

Login





