Regex Frage, Anfang und Ende entfernen

Hallo, ich möchte gerne _ und/oder - (mehrmals) am Anfang und Ende eines Strings entfernen (nicht in der Mitte), ist dieser Ansatz (reguläre Ausdruck) richtig:

Matcher m2 = p2.matcher(sb1);
StringBuilder sb2 = new StringBuilder();
if (m2.find()) {
    sb2.append(m2.group(1));
}```
Links:
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
(.*? == reluctant quantifier)
Danke für Eure Hilfe

[quote=CyborgBeta]ist dieser Ansatz (reguläre Ausdruck) richtig[/quote]UnitTest
könnten Gewissheit bringen
[spoiler]```import static org.junit.Assert.*;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

public class PatternTest {
Pattern pattern = Pattern.compile("^[-](.?)[-]*$");

@Test
public void test() {
    checkPattern("", "keine Umrandung", "");
    checkPattern("_", "ein Unterstrich vorn", "");
    checkPattern("__", "zwei Unterstriche vorn", "");
    checkPattern("-", "ein Minus vorn", "");
    checkPattern("--", "zwei Minus vorn", "");
    //...
}

private void checkPattern(String prefix, String gesuchterText, String suffix) {
    Matcher matcher = pattern.matcher(prefix+gesuchterText+suffix);
    assertTrue("pattern gefunden", matcher.find());
    assertEquals("Inhalt", gesuchterText, matcher.group(1));
}

}```[/spoiler]

bye
TT

Sieh aus, als könnte es funktionieren. Ich hätte nur andersrum gedacht, nicht “Capture das, was übrig bleiben soll”, sondern “Nimm weg, was stört”. Deswegen schlage ich folgendes vor:

    // Alternativen (durch | getrennt) in einer non capturing group (?:)
    String regex = "(?:^[_-]*|[_-]*$)";
    Pattern pattern = Pattern.compile(regex);
    String oldString = "-_-_---Das - soll __ übrig_- bleiben-_-___---";
    Matcher matcher = pattern.matcher(oldString);
    String newString = matcher.replaceAll("");
    System.out.println(newString);

Damit sparst Du Dir die Eigenprogrammierung der if-Verzweigung und den StringBuilder. Du wirst sehen, intern funktioniert die replaceAll-Methode ähnlich. Aber du bekommst eben direkt den String und musst das nicht selbst implementieren. Gut finde ich auf jeden Fall, dass Du an Pattern/Matcher gedacht hast und nicht String.replaceAll verwendet hast. Für eine einmalige Verwendung tut es String.replaceAll auch, aber da wird JEDEs Mal ein neues Pattern kompiliert. Wenn Du die Funktion also auf eine Reihe von Strings anwenden willst, ist Pattern/Matcher besser.

klappt

[spoiler]```public class PatternTest {
Pattern pattern = Pattern.compile(„[1](.?)[-]$„);
Pattern pattern2 = Pattern.compile(“[2]
|[
-]*$“);

@Test
public void test() {
    checkPattern("", "keine Umrandung", "");
    checkPattern("_", "ein Unterstrich vorn", "");
    checkPattern("__", "zwei Unterstriche vorn", "");
    checkPattern("-", "ein Minus vorn", "");
    checkPattern("--", "zwei Minus vorn", "");
    //...
    checkPattern("--", "zwei Minus vorn _ und - in der Mitte und zwei untwestriche am Ende", "__");
}

private void checkPattern(String prefix, String gesuchterText, String suffix) {
    checkPattern1(prefix, gesuchterText, suffix);
    checkPattern2(prefix, gesuchterText, suffix);
}

private void checkPattern1(String prefix, String gesuchterText,
        String suffix) {
    Matcher matcher = pattern.matcher(prefix+gesuchterText+suffix);
    assertTrue("pattern gefunden", matcher.find());
    assertEquals("Inhalt", gesuchterText, matcher.group(1));
}
private void checkPattern2(String prefix, String gesuchterText,
        String suffix) {
    Matcher matcher = pattern2.matcher(prefix+gesuchterText+suffix);
    assertTrue("pattern gefunden", matcher.find());
    assertEquals("Inhalt", gesuchterText, matcher.replaceAll(""));
}

}```[/spoiler]

bye
TT


  1. _- ↩︎

  2. _- ↩︎

Für genau solche Arten von Tests finde ich TestNG klasse. Einfach schnell einen Dataprovider und gut ist. Da bekommt man dann auch aussagekräftigere Fehlermeldungen, welcher String genau nicht gepasst hat.

Ich weiß nicht genau was das bei TestNG ist aber bei JUnit gibt es parametrisierte Klassen.

ich hatte auch kurz überlegt das als parametrisierten Test zu machen, wollte das Beispiel dann aber für den TO leichter verständlich haben…

bye
TT

Siehe hier: http://testng.org/doc/documentation-main.html#parameters-dataproviders
Da ist ein kurzes, anschauliches Beispiel, wie es funktioniert.

Im groben ist es wie die parametrisierbaren Tests, nur vielleicht ein µ flexibler.

Ja, sieht sehr danach aus. Noch nie mit TestNG in Berührung gekommen, wusste nur, dass es jenseits von Junit noch etwas gibt :slight_smile:

Ich zeige euch jetzt erst mal, was ich hier habe:

                } else if (jrb == jrb1) {
                    append("jrb1");
                    int i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.startsWith("uvwxyz") || anfang.matches("^t\\d{3,4}$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%04d", i) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                    i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.matches("^t\\d{4,4}$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%03d", i) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                } else if (jrb == jrb2) {
                    append("jrb2");
                    int i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.startsWith("uvwxyz") || anfang.matches("^x\\d{3,4}$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%04d", i) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                    i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.matches("^x\\d{4,4}$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%03d", i) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                } else if (jrb == jrb3) {
                    append("jrb3");
                    int i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (!anfang.startsWith("uvwxyz") && !anfang.startsWith("uvwxyz2") && !anfang.matches("^[tx]\\d{3,4}$")) {
                                if (anfang.matches("^na\\d{3,3}_.*$")) {
                                    anfang = anfang.substring(6);
                                } else if (anfang.matches("^na\\d{4,4}_.*$")) {
                                    anfang = anfang.substring(7);
                                } else if (anfang.matches("^na_\\d{3,3}_.*$")) {
                                    anfang = anfang.substring(7);
                                } else if (anfang.matches("^na_\\d{4,4}_.*$")) {
                                    anfang = anfang.substring(8);
                                }
                                Pattern p1 = Pattern.compile("[\\w-]+");
                                Matcher m1 = p1.matcher(anfang.toLowerCase());
                                StringBuilder sb1 = new StringBuilder();
                                while (m1.find()) {
                                    sb1.append(m1.group());
                                }
                                Pattern p2 = Pattern.compile("^[\\d_-]*(.*?)[\\d_-]*$");
                                Matcher m2 = p2.matcher(sb1);
                                StringBuilder sb2 = new StringBuilder();
                                if (m2.find()) {
                                    sb2.append(m2.group(1));
                                }
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%04d_", i) + sb2 + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                    i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.matches("^na_\\d{4,4}_.*$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%03d_", i) + anfang.substring(8) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                } else if (jrb == jrb4) {
                    append("jrb4");
                    int i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.matches("^\\d{3,3}-.*$")) {
                                anfang = anfang.substring(4);
                            } else if (anfang.matches("^\\d{4,4}-.*$")) {
                                anfang = anfang.substring(5);
                            }
                            Pattern p2 = Pattern.compile("^[\\d_-]*(.*?)[\\d_-]*$");
                            Matcher m2 = p2.matcher(anfang);
                            StringBuilder sb2 = new StringBuilder();
                            if (m2.find()) {
                                sb2.append(m2.group(1));
                            }
                            newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%04d-", i) + sb2 + ende);
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                    i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.matches("^\\d{4,4}-.*$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%03d-", i) + anfang.substring(5) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                }```

Jetzt das Problem: Das Ganze funktioniert nicht. Z. B. soll eine Datei in na_0595_uvwxyz.jpg umbenannt werden, und anschließend in na_595_uvwxyz.jpg . Aber alle Files in dem File-Array fa ändern sich nach der Umbenennungsanweisung `file.renameTo(newFile);` natürlich nicht. Problem: Jetzt hat er mir alle Dateien in zwei Ordnern falsch umbenannt. :(
Ich bin dran, nachher hab' ich's wohl.

Edit: Damit geht's jetzt:

```        auswahl.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jfc.showOpenDialog(jf);
            }
        });
        start.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                File folder = jfc.getSelectedFile();
                JRadioButton jrb = null;
                for (Enumeration<AbstractButton> eab = bg.getElements(); eab.hasMoreElements();) {
                    AbstractButton ab = eab.nextElement();
                    if (ab.isSelected()) {
                        jrb = (JRadioButton) ab;
                        break;
                    }
                }
                if (folder == null || jrb == null || folder.getParent() == null) {
                    return;
                }

                File[] fa = folder.listFiles();
                Arrays.sort(fa, new Comparator<File>() {
                    @Override
                    public int compare(File o1, File o2) {
                        return Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
                    }
                });
                for (File file : fa) {
                    append(file);
                }

                if (false) {
                } else if (jrb == jrb1) {
                    append("jrb1");
                    
                } else if (jrb == jrb2) {
                    append("jrb2");
                    
                } else if (jrb == jrb3) {
                    append("jrb3");
                    
                } else if (jrb == jrb4) {
                    append("jrb4");
                    
                } else if (jrb == jrb5) {
                    append("jrb5");
                    int i = 1;
                    for (File file : fa) {
                        if (file.isFile() && file.canWrite()) {
                            String name = file.getName().trim();
                            String anfang = name.substring(0, name.length() - 4).trim();
                            String ende = name.substring(name.length() - 4);
                            File newFile = null;
                            if (anfang.matches("^t\\d{4,4}$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%03d", i) + ende);
                            } else if (anfang.matches("^x\\d{4,4}$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%03d", i) + ende);
                            } else if (anfang.matches("^na_\\d{4,4}_.*$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%03d_", i) + anfang.substring(8) + ende);
                            } else if (anfang.matches("^\\d{4,4}-.*$")) {
                                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%03d-", i) + anfang.substring(5) + ende);
                            }
                            if (newFile != null) {
                                append("file    = " + file);
                                append("newFile = " + newFile);
                                file.renameTo(newFile);
                                i++;
                            }
                        }
                    }
                }
            }
        });```

Hier ist das ganze ohne lästige Einrückung:

} else if (jrb == jrb1) {
    append("jrb1");
    int i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.startsWith("uvwxyz") || anfang.matches("^t\\d{3,4}$")) {
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%04d", i) + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
    i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.matches("^t\\d{4,4}$")) {
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%03d", i) + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
} else if (jrb == jrb2) {
    append("jrb2");
    int i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.startsWith("uvwxyz") || anfang.matches("^x\\d{3,4}$")) {
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%04d", i) + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
    i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.matches("^x\\d{4,4}$")) {
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%03d", i) + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
} else if (jrb == jrb3) {
    append("jrb3");
    int i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (!anfang.startsWith("uvwxyz") && !anfang.startsWith("uvwxyz2") && !anfang.matches("^[tx]\\d{3,4}$")) {
                if (anfang.matches("^na\\d{3,3}_.*$")) {
                    anfang = anfang.substring(6);
                } else if (anfang.matches("^na\\d{4,4}_.*$")) {
                    anfang = anfang.substring(7);
                } else if (anfang.matches("^na_\\d{3,3}_.*$")) {
                    anfang = anfang.substring(7);
                } else if (anfang.matches("^na_\\d{4,4}_.*$")) {
                    anfang = anfang.substring(8);
                }
                Pattern p1 = Pattern.compile("[\\w-]+");
                Matcher m1 = p1.matcher(anfang.toLowerCase());
                StringBuilder sb1 = new StringBuilder();
                while (m1.find()) {
                    sb1.append(m1.group());
                }
                Pattern p2 = Pattern.compile("^[\\d_-]*(.*?)[\\d_-]*$");
                Matcher m2 = p2.matcher(sb1);
                StringBuilder sb2 = new StringBuilder();
                if (m2.find()) {
                    sb2.append(m2.group(1));
                }
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%04d_", i) + sb2 + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
    i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.matches("^na_\\d{4,4}_.*$")) {
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%03d_", i) + anfang.substring(8) + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
} else if (jrb == jrb4) {
    append("jrb4");
    int i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.matches("^\\d{3,3}-.*$")) {
                anfang = anfang.substring(4);
            } else if (anfang.matches("^\\d{4,4}-.*$")) {
                anfang = anfang.substring(5);
            }
            Pattern p2 = Pattern.compile("^[\\d_-]*(.*?)[\\d_-]*$");
            Matcher m2 = p2.matcher(anfang);
            StringBuilder sb2 = new StringBuilder();
            if (m2.find()) {
                sb2.append(m2.group(1));
            }
            newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%04d-", i) + sb2 + ende);
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
    i = 1;
    for (File file : fa) {
        if (file.isFile() && file.canWrite()) {
            String name = file.getName().trim();
            String anfang = name.substring(0, name.length() - 4).trim();
            String ende = name.substring(name.length() - 4);
            File newFile = null;
            if (anfang.matches("^\\d{4,4}-.*$")) {
                newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%03d-", i) + anfang.substring(5) + ende);
            }
            if (newFile != null) {
                append("file    = " + file);
                append("newFile = " + newFile);
                file.renameTo(newFile);
                i++;
            }
        }
    }
}```
```auswahl.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        jfc.showOpenDialog(jf);
    }
});
start.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        File folder = jfc.getSelectedFile();
        JRadioButton jrb = null;
        for (Enumeration<AbstractButton> eab = bg.getElements(); eab.hasMoreElements();) {
            AbstractButton ab = eab.nextElement();
            if (ab.isSelected()) {
                jrb = (JRadioButton) ab;
                break;
            }
        }
        if (folder == null || jrb == null || folder.getParent() == null) {
            return;
        }

        File[] fa = folder.listFiles();
        Arrays.sort(fa, new Comparator<File>() {
            @Override
            public int compare(File o1, File o2) {
                return Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
            }
        });
        for (File file : fa) {
            append(file);
        }

        if (false) {
        } else if (jrb == jrb1) {
            append("jrb1");
           
        } else if (jrb == jrb2) {
            append("jrb2");
           
        } else if (jrb == jrb3) {
            append("jrb3");
           
        } else if (jrb == jrb4) {
            append("jrb4");
           
        } else if (jrb == jrb5) {
            append("jrb5");
            int i = 1;
            for (File file : fa) {
                if (file.isFile() && file.canWrite()) {
                    String name = file.getName().trim();
                    String anfang = name.substring(0, name.length() - 4).trim();
                    String ende = name.substring(name.length() - 4);
                    File newFile = null;
                    if (anfang.matches("^t\\d{4,4}$")) {
                        newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%03d", i) + ende);
                    } else if (anfang.matches("^x\\d{4,4}$")) {
                        newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%03d", i) + ende);
                    } else if (anfang.matches("^na_\\d{4,4}_.*$")) {
                        newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%03d_", i) + anfang.substring(8) + ende);
                    } else if (anfang.matches("^\\d{4,4}-.*$")) {
                        newFile = newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%03d-", i) + anfang.substring(5) + ende);
                    }
                    if (newFile != null) {
                        append("file    = " + file);
                        append("newFile = " + newFile);
                        file.renameTo(newFile);
                        i++;
                    }
                }
            }
        }
    }
});```
```/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg09einruecken;

import java.io.*;
import java.util.*;

/**
 * @author CB
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        List<File> lf = new LinkedList<File>();
        for (String string : args) {
            File f = new File(string);
            if (f.exists() && f.isFile() && f.canWrite()) {
                lf.add(f);
            }
        }

        for (File file : lf) {
            int len = -1;
            StringBuilder sb = new StringBuilder();
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                if (len == -1) {
                    int i = 0;
                    while (i < line.length() && line.charAt(i) == ' ') {
                        i++;
                    }
                    len = i;
                }
                if (len <= line.length()) {
                    sb.append(line.substring(len));
                }
                sb.append('
');
            }
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter(file), 16384);
            bw.write(sb.toString());
            bw.flush();
            bw.close();
        }
    }
}```

Lässt sich vielleicht dahingehend erweitern, dass PrintWriter verwendet wird und Leerzeichen durch Tabulatoren ersetzt werden. Nützliches Tool!

Mal unabhängig fon Deinem Problem
[spoiler][quote=CBBB]if (false) { } else[/quote]ist hoffentlich ne Abkürzung damit der Code kompiliert, und das false ist eigentlich ein Methodenaufruf und auch der Block ist nicht leer…

[HR][/HR][quote=CBBB;88880]newFile = newFile =[/quote]was soll das denn? Zu wenige Zeichen in der Zeile?

[HR][/HR][quote=CBBB;88880]new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%03d_", i) + anfang.substring(8) + ende);[/quote]
geht einfacherer so new File(file.getParentFile(), String.format("na_%03d_%s%s", i,anfang.substring(8) ,ende)); (wobei ich ja ehr Freund von [JAPI]MessageFormat[/JAPI] bin…)

[HR][/HR][quote=CBBB;88880]iint i = 1; for (File file : fa) {[/quote]Wenn man sowieso die Laufvariable braucht ist gegen die alte for-Schleife nichts einzuwenden, die Darf nämlich auch von 1 bis <=array.length laufen…

[HR][/HR]Außerdem solltest Du sich wiederholenden Code in eine Methode auslagern und die sich ändernden Strings als Parameter übergeben.[/spoiler]
Oder lies es besser nicht, Du findest ja auch Ratschäge doof nach denen Du gefragt hast…

bye
TT

Auch, wenn ich mich damit in schlechte Gesellschaft begebe, aber auch mich lässt der Code etwas ratlos zurück. Meine Gedankten dazu:

  • File.listFiles gibt es auch in zwei gefilterten Varianten. Eine mit FileNameFilter und eine mit FileFilter. Damit dürften schonmal eine Menge der ifs wegfallen.
  • Files.walkFileTree und ein FileVisitor könnten Dir die selbst programmierten Schleifen ersparen (weiß nicht ob’s passt, bin dafür nicht tief genug in den Code eingestiegen, nur so ein Eindruck)
  • Und 4fach-Verschachtelungen gehen gar nicht. Unbedingt in Methoden mit sprechenden Namen auslagern!

Upps newFile = newFile = hab ich gar nicht gesehen.

    for (File file : fa) {```
brauche ich natürlich, denn nicht jedes File aus File-Array braucht ein neues i .

```    if (false) {
    } else if (bedingung) {```
benötige ich auch, solange es IDE nicht gebacken bekommt, alle bedingungen auf dem gleichen Level einzurücken.

Also schon mal alles bis auf `new File(directory, fileName);` widerlegt.  @Timothy_Truckle 

Und weil du Programmcode von mir bei dir eh nie laufen lässt, ist das auch egal.

 @nillehammer : Da ist natürlich was dran (FileFilter), Files.walkFileTree kenne ich mich zu wenig mit aus. Ich setze das Thema mal auf gelöst.

[QUOTE=CyborgBeta]

    } else if (bedingung) {```
benötige ich auch, solange es IDE nicht gebacken bekommt, alle bedingungen auf dem gleichen Level einzurücken.[/QUOTE]
Die Bedingung wird nie erfüllt und selbst wenn sie in einem parallelen Universum erfüllt werden sollte wird nichts ausgeführt --> überflüssiger Code. Was für eine IDE nutzt Du? Meine würde mir sowas als "dead code" ankreiden.

Ansonsten: Du überprüfst wo gar nicht notwendig:

> ```File newFile = null;
> if (...) {
>        newFile = ...
> }
> if (newFile != null) {```

newFile kann nur null sein, wenn die Bedingung der vorhergehenden if nicht erfüllt ist, warum also den Code der zweiten if nicht gleich in die erste mit reinpacken?

> ``` if (!anfang.startsWith("uvwxyz") && !anfang.startsWith("uvwxyz2")...```

Sind diese `uvwxyz...` nur Dummy Werte? Ansonsten kannst Du Dir die zweite Bedingung sparen.

Auslagern von wiederkehrenden Aktionen in Methoden wurde schon angesprochen, z.B. das Zerlegen der Dateinamen. Kann man davon ausgehen, dass die Dateien immer eine Endung aus drei Buchstaben besitzen?

In den for Schleifen erzeugst Du Pattern immer wieder neu. Es würde ausreichen diese einmalig zu erzeugen und dann immer wieder zu verwenden.
Die Aufrufe von `String.matches(...)` erzeugen übrigens auch jedes Mal ein neues Pattern.

[QUOTE=CyborgBeta;88887]@Timothy_Truckle 

Und weil du Programmcode von mir bei dir eh nie laufen lässt, ist das auch egal.[/QUOTE]
Deinen Programmcode kann man ja so ohne weiteres nicht bei sich laufen lassen, da es ja nur Snippets sind.

Ja, ich musste die Bezeichner/String-Literale ändern, weil’s ja nur um meine Dateien geht. Hier zum Testen:

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg08renamer;

import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter; // sry für die ganze Auflistung, java.java234.*; nimmt er nicht

/**
 * @author CB
 */
public class Main {

    private static final JTextArea jta = new JTextArea("Ausgabe
");

    static {
        jta.setFont(Font.decode("Consolas"));
    }

    private static void append(Object o) {
        jta.append(o.toString() + '
');
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        final JFrame jf = new JFrame("Renamer");
        jf.setLayout(new GridLayout(1, 2));
        JPanel jp1 = new JPanel(new GridLayout(7, 1));
        JPanel jp2 = new JPanel(new GridLayout(1, 1));
        final JFileChooser jfc = new JFileChooser();
        jfc.setMultiSelectionEnabled(false);
        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        jfc.setFileFilter(new FileFilter() {
            @Override
            public boolean accept(File f) {
                return f.isDirectory() && f.canWrite();
            }

            @Override
            public String getDescription() {
                return "Verzeichnis";
            }
        });
        JButton auswahl = new JButton("Verzeichnis wählen...");
        final ButtonGroup bg = new ButtonGroup();
        final JRadioButton jrb1 = new JRadioButton("tttt");
        final JRadioButton jrb2 = new JRadioButton("xxxx");
        final JRadioButton jrb3 = new JRadioButton("na");
        final JRadioButton jrb4 = new JRadioButton("music-");
        final JRadioButton jrb5 = new JRadioButton("from 4321 to 321");
        JButton start = new JButton("Start");
        JScrollPane jsp = new JScrollPane(jta);

        auswahl.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jfc.showOpenDialog(jf);
            }
        });
        start.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                File folder = jfc.getSelectedFile();
                JRadioButton jrb = null;
                for (Enumeration<AbstractButton> eab = bg.getElements(); eab.hasMoreElements();) {
                    AbstractButton ab = eab.nextElement();
                    if (ab.isSelected()) {
                        jrb = (JRadioButton) ab;
                        break;
                    }
                }
                if (folder == null || jrb == null || folder.getParent() == null) {
                    return;
                }

                File[] fa = folder.listFiles(new java.io.FileFilter() {
                    @Override
                    public boolean accept(File f) {
                        return f.isFile() && f.canWrite();
                    }
                });
                Arrays.sort(fa, new Comparator<File>() {
                    @Override
                    public int compare(File o1, File o2) {
                        return Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
                    }
                });
                for (File file : fa) {
                    append(file);
                }

                if (false) {
                } else if (jrb == jrb1) {
                    append("jrb1");
                    int i = 1;
                    for (File file : fa) {
                        String name = file.getName().trim();
                        String anfang = name.substring(0, name.length() - 4).trim();
                        String ende = name.substring(name.length() - 4);
                        File newFile = null;
                        if (anfang.startsWith("tttt") || anfang.matches("^t\\d{3,4}$")) {
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%04d", i) + ende);
                        }
                        if (newFile != null) {
                            append("file    = " + file);
                            append("newFile = " + newFile);
                            file.renameTo(newFile);
                            i++;
                        }
                    }
                } else if (jrb == jrb2) {
                    append("jrb2");
                    int i = 1;
                    for (File file : fa) {
                        String name = file.getName().trim();
                        String anfang = name.substring(0, name.length() - 4).trim();
                        String ende = name.substring(name.length() - 4);
                        File newFile = null;
                        if (anfang.startsWith("xxxx") || anfang.matches("^x\\d{3,4}$")) {
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%04d", i) + ende);
                        }
                        if (newFile != null) {
                            append("file    = " + file);
                            append("newFile = " + newFile);
                            file.renameTo(newFile);
                            i++;
                        }
                    }
                } else if (jrb == jrb3) {
                    append("jrb3");
                    int i = 1;
                    for (File file : fa) {
                        String name = file.getName().trim();
                        String anfang = name.substring(0, name.length() - 4).trim();
                        String ende = name.substring(name.length() - 4);
                        File newFile = null;
                        if (!anfang.startsWith("tttt") && !anfang.startsWith("xxxx") && !anfang.matches("^[tx]\\d{3,4}$")) {
                            if (anfang.matches("^na\\d{3,3}_.*$")) {
                                anfang = anfang.substring(6);
                            } else if (anfang.matches("^na\\d{4,4}_.*$")) {
                                anfang = anfang.substring(7);
                            } else if (anfang.matches("^na_\\d{3,3}_.*$")) {
                                anfang = anfang.substring(7);
                            } else if (anfang.matches("^na_\\d{4,4}_.*$")) {
                                anfang = anfang.substring(8);
                            }
                            Pattern p1 = Pattern.compile("[\\w-]+");
                            Matcher m1 = p1.matcher(anfang.toLowerCase());
                            StringBuilder sb1 = new StringBuilder();
                            while (m1.find()) {
                                sb1.append(m1.group());
                            }
                            Pattern p2 = Pattern.compile("^[\\d_-]*(.*?)[\\d_-]*$");
                            Matcher m2 = p2.matcher(sb1);
                            StringBuilder sb2 = new StringBuilder();
                            if (m2.find()) {
                                sb2.append(m2.group(1));
                            }
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%04d_", i) + sb2 + ende);
                        }
                        if (newFile != null) {
                            append("file    = " + file);
                            append("newFile = " + newFile);
                            file.renameTo(newFile);
                            i++;
                        }
                    }
                } else if (jrb == jrb4) {
                    append("jrb4");
                    int i = 1;
                    for (File file : fa) {
                        String name = file.getName().trim();
                        String anfang = name.substring(0, name.length() - 4).trim();
                        String ende = name.substring(name.length() - 4);
                        File newFile = null;
                        if (anfang.matches("^\\d{3,3}-.*$")) {
                            anfang = anfang.substring(4);
                        } else if (anfang.matches("^\\d{4,4}-.*$")) {
                            anfang = anfang.substring(5);
                        }
                        Pattern p = Pattern.compile("^[\\d_-]*(.*?)[\\d_-]*$");
                        Matcher m = p.matcher(anfang);
                        StringBuilder sb = new StringBuilder();
                        if (m.find()) {
                            sb.append(m.group(1));
                        }
                        newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%04d-", i) + sb + ende);
                        if (newFile != null) {
                            append("file    = " + file);
                            append("newFile = " + newFile);
                            file.renameTo(newFile);
                            i++;
                        }
                    }
                } else if (jrb == jrb5) { // mache aus 4321 321
                    append("jrb5");
                    int i = 1;
                    for (File file : fa) {
                        String name = file.getName().trim();
                        String anfang = name.substring(0, name.length() - 4).trim();
                        String ende = name.substring(name.length() - 4);
                        File newFile = null;
                        if (anfang.matches("^t\\d{4,4}$")) {
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("t%03d", i) + ende);
                        } else if (anfang.matches("^x\\d{4,4}$")) {
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("x%03d", i) + ende);
                        } else if (anfang.matches("^na_\\d{4,4}_.*$")) {
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("na_%03d_", i) + anfang.substring(8) + ende);
                        } else if (anfang.matches("^\\d{4,4}-.*$")) {
                            newFile = new File(file.getParentFile().toString() + File.separatorChar + String.format("%03d-", i) + anfang.substring(5) + ende);
                        }
                        if (newFile != null) {
                            append("file    = " + file);
                            append("newFile = " + newFile);
                            file.renameTo(newFile);
                            i++;
                        }
                    }
                }
            }
        });

        jf.add(jp1);
        jf.add(jp2);
        jp1.add(auswahl);
        bg.add(jrb1);
        bg.add(jrb2);
        bg.add(jrb3);
        bg.add(jrb4);
        bg.add(jrb5);
        jp1.add(jrb1);
        jp1.add(jrb2);
        jp1.add(jrb3);
        jp1.add(jrb4);
        jp1.add(jrb5);
        jp1.add(start);
        jp2.add(jsp);

        jf.pack();
        jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        jf.setVisible(true);
    }
}```

Ich habe da viel mit Copy&Paste gearbeitet, deshalb etwas merkwürdig.

Erklärung:
Es gibt Dateien, die mit tttt anfangen
Es gibt Dateien, die mit xxxx anfangen
Es gibt Dateien, die weder mit tttt noch mit xxxx anfangen
Es gibt Dateien, die music sind und mit irgendwas anfangen
Es gibt Dateien, die mit t4444 oder x4444 oder na_4444_ oder 4444- anfangen (schon umbenannte Dateien) und in t333, etc. umbenannt werden müssen