Dateiname auf Vorkommen prüfen

adms

Neues Mitglied
Hallo zusammen,

ich bin neu hier und hoffe es kann mir jemand helfen. Vermutlich ist es ein Einfaches für euch ;-)

Ich habe folgendes Anliegen: Ich würde gerne einen Dateinamen auf Unterstriche prüfen. Die Dateinamen sind in der Länge variabel. Einzige Unterscheidung der Namen sind die Anzahl Unterstriche. Entweder gibt es die Datei mit 7 oder 8 Unterstrichen. Ich möchte gerne eine wenn dann Abfrage erstellen, die zuerst auf die Anzahl der Unterstriche prüft. Also wenn im Dateinamen 8 Unterstriche vorhanden sind, dann soll er dies machen und bei 7 soll er was anderes machen.

Ich habe bereits versucht hier etwas mit Regex-Ausdrücken zu erstellen, komme aber einfach nicht weiter.

Java:
//Dateiname veraendern


var FileNameGroup1 = DocName.split("_")[0]; //von links 1. Instanz

var FileNameGroup2 = DocName.split("_")[1]; //von links 2. Instanz

var FileNameGroup3 = DocName.split("_")[2]; //von links 3. Instanz

var FileNameGroup4 = DocName.split("_")[3]; //von links 4. Instanz

var FileNameGroup5 = DocName.split("_")[4]; //von links 5. Instanz

var FileNameGroup6 = DocName.split("_")[5]; //von links 6. Instanz

var FileNameGroup7 = DocName.split("_")[6]; //von links 7. Instanz

var FileNameGroup8 = DocName.split("_")[7]; //von links 8. Instanz

var FileNameGroup9 = DocName.split("_")[8]; //von links 9. Instanz


var regex = /w[_]{8}/

var matches = DocName.match(regex);


if (matches) {


var newFileName = FileNameGroup1;


}


else {


var newFileName = FileNameGroup1 + "_" + FileNameGroup2 + "_" + FileNameGroup4 + "_" + FileNameGroup5 + "_" + FileNameGroup6 + "_" + FileNameGroup7 + "_" + FileNameGroup8;


}

Ich freue mich auf eure Hilfe.

Vielen Dank.
 

KonradN

Super-Moderator
Mitarbeiter
Ich verstehe gerade nicht so ganz Dein Problem.

Wieso machst Du nicht einfach ein split Aufruf und prüfst dann, wie viele Elemente Du in dem Array zurück bekommen hast? Und ohne einen solchen Check hast Du immer das Problem des IndexOutOfBoundsException, wenn Du auf nicht existierende Elemente zugreifst.

Und was genau willst Du machen? Der Code sieht so aus, als ob die Anzahl ggf. egal ist und Du einfach mit einer Schleife den neuen Namen erstellen könntest...

Ansonsten die üblichen Hinweise: In Java ist es üblich, variablen mit einem kleinen Buchstaben zu beginnen.
 

White_Fox

Top Contributor
Mal so aus dem Ärmel geschüttelt:

Java:
var filename = "yourfilename";
int underlinecount;

underlinecount = filename.replaceAll("[_]", "").length();

if(underlinecount == 7){
    //...mach irgendwas
}

if(underlinecount == 8){
    //...mach irgendwas anders
}

Wenn du viele Dateinamen hast, dann mach das lieber mit einer ArrayList, das
 

KonradN

Super-Moderator
Mitarbeiter
underlinecount = filename.replaceAll("[_]", "").length();
Sollte das nicht eher etwas sein wie [^_]?
Du willst alles ersetzen, was kein _ ist. So ersetzt du nur die Underscore Zeichen und hast dann nur den Rest - die Länge wäre dann die Anzahl der Zeichen, die kein Unterstrich sind. Oder habe ich das jetzt auf die Schnelle falsch gesehen?
 

ing0-bing0

Aktives Mitglied
Java:
    public static int countUnderscores(String x) {
        return (int) x.chars().filter(ch -> ch == '_').count();
    }
 

KonradN

Super-Moderator
Mitarbeiter
Im konkreten Fall vermutlich schon, im Allgemeinen liefert das aber nicht die Zahl der Unterstriche, weil Unterstriche am Ende nicht gezählt werden. Dazu müsste man etwas wie dateiname.split("_", Integer.MAX_VALUE) verwenden.
Ja, das ist durchaus richtig - nur eben ist die Frage, was wirklich die genauer Anforderung ist. Denn es scheint in dem Post ja doch darum zu gehen, mit den jeweiligen Bausteinen etwas zu machen - also somit explizit eben nicht nur um das reine Zählen der '_' zu gehen. Und da ist dann ggf. der split aufruf das, was der Lösung am nächsten kommt.

Wobei man natürlich auch ein Regulären Ausdruck aufbauen kann, also ggf. etwas wie:
[^_]*_[^_]*_[^_]*_[^_]*_[^_]*_[^_]*_[^_]*_[^_]*
Also Blöcke, die keine _ enthalten getrennt durch _
Das ggf. noch mit Caption Blöcken versehen um dann die einzenen Blöcke zu bekommen. Und genau das ist so halt nicht wirklich sinnvoll. Da dann doch lieber die split Lösung (meine ich) :)
 

adms

Neues Mitglied
Guten Morgen zusammen.

Vielen Dank für die zahlreichen Beiträge. Ich habe es heute morgen direkt einmal eingebaut und getestet. Und was soll ich sagen: Es funktioniert genau so wie ich es mir vorgestellt habe! Herzlichen Dank.

Dieser Schnipsel war es am Ende:
Java:
underlinecount = docname.split("_").length - 1;

Das Programm unterscheidet nun nach einem Dateinamen mit 7 oder 8 Unterstrichen und setzt die zuvor aufgeteilten Blöcke wieder zu einem neuen Dateinamen zusammen.
 

KonradN

Super-Moderator
Mitarbeiter
Super, dass Du für Dich eine Lösung gefunden hast und danke, dass Du diese mit uns geteilt hast. Ich möchte aber noch einmal auf zwei Dinge hinweisen:

a) Hinweis von @mihe7 in #10: (Evtl. hast Du es auch direkt selbst schon so verstanden - ich will nur sicher gehen, dass es nicht unter gegangen ist) Es gibt einen Unterschied zwichen den folgenden beiden Aufrufen:
underlinecount = docname.split("_").length - 1;
underlinecount = docname.split("_", Integer.MAX_VALUE).length - 1;

Wenn am Ende leere Blöcken kommen, dann unterscheidet sich die Ausgabe, d.h. bei docname =
"a_b_c_d_e_f_g_h" => Beide Aufrufe liefern 7
"a_b_c_d_e_f__" => Der erste Aufruf liefert 5, der zweite aber 7 - leere Elemente am Ende werden unterdrückt, wenn man den Aufruf mit einem Parameter macht.

Das mag uninteressant sein, aber ggf. kommt dies aber doch vor. Hier sollte man also ggf. schauen, welches Verhalten Du haben möchtest.

b) Vereinfachung von Aufrufen. Derzeit rufst Du vermutlich mehrfach das split auf. Es reicht aber, dieses einmalig aufzurufen, also etwas wie:
Java:
String[] namensTeile = docname.split("_");
int underlinecount = namensTeile.length - 1;
String fileNameGroup1 = namensTeile[0];
...
 

KonradN

Super-Moderator
Mitarbeiter
Nur zur Info damit das nicht untergeht: Man sollte meine in #8 gezeigte Lösung verwenden.
Wenn man den Namen eh in teile zerlegen möchte um die Teile im Weiteren zu verwenden, dann wäre dies schlicht unnötig. Und wenn über Deine Anzahl irgendwas ermittelt wird um darauf basierend auf Array Elemente zuzugreifen, dann wäre es sogar noch fehleranfällig - wie man ja an Hand der Problematik mit den zwei unterschiedlichen split Methoden erkennen kann.
 

KonradN

Super-Moderator
Mitarbeiter
Ich kann doch nur auf das Antworten, wonach gefragt wurde... Das Phantasieren überlasse ich anderen.
Man (Ja, nicht Du - das wissen wir Tobias! Deine Probleme mit dem Verständnis einfacher Texte kennt hier ja jeder) kann aber auch auf das ganze Posting eingehen und nicht einfach alles ignorieren, was einem sich nicht sofort erschließt. Und dann findet man in dem ersten Post doch tatsächlich sehr viele Hinweise, dass mit den jeweiligen Teilen etwas gemacht werden könnte.

Daher stimme ich einfach einmal mit ein:
*kopfschüttel*
 

KonradN

Super-Moderator
Mitarbeiter
Was willst Du mir sagen? Dass Du keine Argumente hast? Dass Du einfach nichts zum Thema beizutragen hast? Das wussten wir doch schon alle ...
 

KonradN

Super-Moderator
Mitarbeiter
Ne dein Verhalten, Konrad :) Versuch bitte nicht etwas Richtiges als falsch darzustellen. Danke.
Wo wurde etwas Richtiges als Falsch dargestellt? Mangelhaftes Textverständnis.

Nirgends wurde behauptet, dass Deine Lösung falsch ist. Es wurde nur schlicht bezweifelt, dass dies die Lösung ist, die wirklich "die Beste" ist. Das sind kleine Unterschiede - aber diese sind durchaus wichtig. Und im Gegensatz zu Dir habe ich mal versucht, etwas zu begründen. Von Dir kommen nur dümmste Bilder und solche Aussagen.
 

KonradN

Super-Moderator
Mitarbeiter
Einigen wir uns einfach darauf: Für Dein Verständnis der Problemdomäne.
Und ja - dieses Bild kann man tatsächlich haben - so man vom ersten Post nur den Satz "Ich möchte gerne eine wenn dann Abfrage erstellen, die zuerst auf die Anzahl der Unterstriche prüft." betrachtet. (Ein Wort musste ich zusätzlich streichen ... das stört Dich hoffentlich nicht zu sehr.)

Also ich denke, dass ich Deine Position durchaus verstanden habe. Zu dem ganzen Rest hast Du ja auch klar eine Meinung geäußert: "Das Phantasieren überlasse ich anderen." - was übersetzt schlicht bedeuten dürfte, dass Du Dir über einen möglichen weiteren Sinn in den Aussagen des TEs keine Gedanken machen willst. Das ist auch Dein gutes Recht und das darfst Du so sehen. Zeichnet ein deutliches Bild bezüglich Textverständnis und so ....
 

Ebi

Mitglied
@adms geht es dir eigentlich um Java oder Javascript?

Java:
var regex = /w[_]{8}/

wäre Javascript. Hier im Forum geht es um Java und auch die Antworten von den anderen beziehen sich auf Java. Manche Sachen funktionieren zufällig auch in Javascript.
 

Ebi

Mitglied
Regex sind sprach-neutral (und in Java kann man mittels "static" ein Verhalten a la JavaScript simulieren). Und man könnte auf gegebene Mittel des Betriebssystems zugreifen (statt Java(Script), Python,...)
Das es RegEx in beiden gibt und die dann auch gleich funktionieren, ist mir klar. Aber die Schreibweise mit /RegEx/ gibt es so nur in Javascript.

Das zufällig bezog ich darauf, dass man underlinecount = docname.split("_").length - 1; sowohl in Java als auch in JavaScript schreiben kann und es funktioniert. Wohin gegen die Lösung mit den Streams so nur in Java funktioniert.
 

Ebi

Mitglied
Mag sein, aber deine Lösung funktioniert trotzdem nicht in Javascript und das was der TO im Eingangsposting geschrieben hat, sieht nach Javascript aus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D kein hauptmanifestattribut in dateiname.jar Java Basics - Anfänger-Themen 14
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
B Dateiname in Datenbank schreiben Java Basics - Anfänger-Themen 2
B Übergabe Dateiname (String) an andere Klasse Java Basics - Anfänger-Themen 4
O OOP fileWriter Dateiname übergeben Java Basics - Anfänger-Themen 12
danielita Dateiname als Argument Java Basics - Anfänger-Themen 3
L Dateiname mit Uhrzeit Java Basics - Anfänger-Themen 26
G Dateiname nachträglich mit endung versehen Java Basics - Anfänger-Themen 5
S Dateiname extrahieren Java Basics - Anfänger-Themen 2
A dateiname aus verzeichnis auslesen Java Basics - Anfänger-Themen 2
E JFileChooser- Dateiname Feld? Java Basics - Anfänger-Themen 2
T new JLabel(new ImageIcon("dateiname&pfad.gif") Java Basics - Anfänger-Themen 2
B Pfad einer Datei & Dateiname Java Basics - Anfänger-Themen 2
G Unverständlicher Dateiname Java Basics - Anfänger-Themen 2
D Dateiname anzeigen lassen Java Basics - Anfänger-Themen 6
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
J erstes Vorkommen eines chars entfernen Java Basics - Anfänger-Themen 1
J Vorkommen von Zeichen Java Basics - Anfänger-Themen 44
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
B gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben Java Basics - Anfänger-Themen 5
B seltenes Vorkommen eines Integers in einem Array Java Basics - Anfänger-Themen 13
J Array; Vorkommen zählen Java Basics - Anfänger-Themen 10
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
K Prüfen ob Strings 2mal vorkommen Java Basics - Anfänger-Themen 21
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
A Zeichen darf nur 3x hintereinander vorkommen Java Basics - Anfänger-Themen 6
H Methoden Array auf Vorkommen eines Integers überprüfen Java Basics - Anfänger-Themen 2
K Alle vorkommen eines Zeichens in StringBuffer Objekt löschen Java Basics - Anfänger-Themen 6
C Vorkommen eines Zeichens zählen Java Basics - Anfänger-Themen 4
C Datei umbennen (letzes vorkommen in File) Java Basics - Anfänger-Themen 5
G Zufallszahlen die alles einmal vorkommen Java Basics - Anfänger-Themen 15
Z Feld prüfen ob 3 gleiche zahlen nach einander vorkommen Java Basics - Anfänger-Themen 3
H Mehrmaliges vorkommen eines Zeichens in einem String Java Basics - Anfänger-Themen 14
F Array - Vorkommen der einzelnen Werte ausgeben Java Basics - Anfänger-Themen 8
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
I Auf vollen Monat prüfen? Java Basics - Anfänger-Themen 22
I Prüfen, ob Anzahl an Monate ein Jahr ergeben Java Basics - Anfänger-Themen 4
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
W Klasse existiert prüfen Java Basics - Anfänger-Themen 5
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
M Array auf Primzahlen prüfen Java Basics - Anfänger-Themen 7
K Wie String prüfen ob drei mal das gleiche Zeichen vorkommt? Java Basics - Anfänger-Themen 7
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
X Zwei Dimensionales Array prüfen Java Basics - Anfänger-Themen 1
B Prüfen, ob Zeit Überschreitung Java Basics - Anfänger-Themen 2
B Sudoku prüfen Java Basics - Anfänger-Themen 13
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
X Array auf Leerstellen prüfen Java Basics - Anfänger-Themen 1
FelixN Prüfen, ob ein 2D-Array rechteckig ist Java Basics - Anfänger-Themen 42
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
B Prüfen, ob Country Code in Europa ist? Java Basics - Anfänger-Themen 24
L Prüfen ob Fax (Tif-Datei) vollständig angekommen ist Java Basics - Anfänger-Themen 15
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
U Mehrfacheingabe auf bestimmte Parameter prüfen Java Basics - Anfänger-Themen 8
B Prüfen, ob Datum2 der gleiche Tag ist wie Datum1 Java Basics - Anfänger-Themen 10
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
K Linux Speicherplatz mit Java prüfen Java Basics - Anfänger-Themen 4
O Array nach gleichen Zahlen prüfen und ausgeben Java Basics - Anfänger-Themen 6
G Compiler-Fehler Auf Anagramm prüfen Java Basics - Anfänger-Themen 1
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Input/Output Prüfen wie oft etwas eingegeben wurde Java Basics - Anfänger-Themen 2
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
S Prüfen ob Zelle in Excel leer ist funktioniert nicht (Apache POI) Java Basics - Anfänger-Themen 18
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
M Erste Schritte Java prüfen ob eine der Möglichkeiten erfüllt ist Java Basics - Anfänger-Themen 2
R Auf Nachkommastellen prüfen. Java Basics - Anfänger-Themen 2
P Argumente auf plausibilität prüfen... Java Basics - Anfänger-Themen 8
F LimitedQueue auf Datum prüfen Java Basics - Anfänger-Themen 6
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
Tommy Nightmare Variable auf mehrere Ungleichheiten prüfen Java Basics - Anfänger-Themen 18
B String mit Emailadresse prüfen Java Basics - Anfänger-Themen 11
E 2D Arrays auf Ungleichheit prüfen! Java Basics - Anfänger-Themen 5
MrSnake Prüfen ob TitledPane schon besteht Java Basics - Anfänger-Themen 2
B Serial Key prüfen -> String mit privatem Key und dann abgleichen; Summe = 0 Java Basics - Anfänger-Themen 8
N Compiler-Fehler Iban prüfen Java Basics - Anfänger-Themen 7
J Prüfen ob Arrays nur mit einem Wert belegt sind Java Basics - Anfänger-Themen 3
M String prüfen Java Basics - Anfänger-Themen 7
E Prüfen ob Sammlung gesetzt wurde - Lebensmittelsammlung Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben