tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von HonniCilest
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
313
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    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
     

  2. #2
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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&#91;])
    Geändert von HonniCilest (13.07.11 um 16:33 Uhr)
    ElJarno bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  3. #3
    SE 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.
     

  4. #4
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Zitat Zitat von HonniCilest Beitrag anzeigen
    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
    ...
    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
     

  5. #5
    SE 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.
     

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Zitat Zitat von SPiKEe Beitrag anzeigen
    String.replaceAll() wäre eine schlechte Wahl gewesen weil replaceAll() einen Regulären Ausdruck verlangt. Wenn überhaupt wäre hier String.replace() wohl besser.
    Warum wäre es eine schlechte Wahl?
    Normal sollte es keine Probleme geben, damit einzelne Zeichen zu ersetzen. Ein Regulärer Ausdruck kann ja auch nur ein Zeichen enthalten.

    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  7. #7
    SE 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.
     

  8. #8
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Zitat Zitat von SPiKEe Beitrag anzeigen
    Das ALL rühert vermutlich daher das eben ALLE Sub-Strings auf die die RegEx zutrifft ersetzt.
    Ja genau das passiert.

    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  9. #9
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Zitat Zitat von zerix Beitrag anzeigen
    Normal sollte es keine Probleme geben, damit einzelne Zeichen zu ersetzen. Ein Regulärer Ausdruck kann ja auch nur ein Zeichen enthalten.
    Man muss eben nur auf Regex-Operatoren Acht geben, z.B. '?' würde, wenn man es einfach so in den String schreibt, Probleme geben.
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  10. #10
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    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

  1. Antworten: 5
    Letzter Beitrag: 22.11.10, 17:31
  2. [Batch] String replacement / DIR Funktion ändern
    Von Blacker im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 29.09.08, 19:27
  3. String Pattern / Zeichen loeschen
    Von MyD im Forum Java
    Antworten: 9
    Letzter Beitrag: 17.05.08, 14:03
  4. Antworten: 3
    Letzter Beitrag: 08.05.07, 09:36
  5. String mittels regex bearbeiten
    Von Samuel im Forum PHP
    Antworten: 5
    Letzter Beitrag: 02.10.03, 14:09