Nummerierung eines String

Status
Nicht offen für weitere Antworten.

Dexta

Mitglied
Hallo,

im folgenden Quellcode habe ich den String "Screenshot.jpeg" gesplittet, so dass am Ende jeweils einen String "Screenshot" und einen String ".jpeg" entsteht. Das hat bisher auch wunderbar geklappt. Nun kau ich mir schon Stunden die Fingernägel ab, weil ich es einfach nicht hinbekomme, eine Schleife zu erstellen, die z.B. 10 Screenshots.jpeg ausgeben soll. Jedoch soll zwischen dem ersten String DatnamePart ("Screenshot") und dem zweiten String DatnamePartEnde (".jpeg") hochnummeriert werden. Also im Endeffekt soll mir die Konsole das ausgeben:

Screenshot.jpeg
Screenshot_1.jpeg
Screenshot_2.jpeg
Screenshot_3.jpeg
....
Screenshot_10.jpeg

Hierzu mein Testprogramm für den Ablauf...

Code:
public class SubStringDemo {
		
	public static void main (String[] args) {	
		
		String screenName = "Screenshot.jpeg";
		String screenEnde = ".jpeg";
		String DatnamePart = "";

		int iPos = screenName.lastIndexOf(".");
		
		String saParts[] = screenName.split("\\.");
		
		if (saParts.length == 1){
			System.out.println("Ungültiger Dateiname!");
		}
		
		// Schleife zum ermitteln der Zeichen bis zum letzten Punkt "." (-1
		for (int i = 0; i < saParts.length-1; i++){
			DatnamePart = new String(DatnamePart.concat(saParts[i] + "."));	
		}
		
		// Erstellt neuen String für die Ausgabe der Dateiendung
		String DatnamePartEnde = "." + saParts[1];
		
		// Gibt den momentan Wert der DatnamePart aus...	
//		System.out.println(DatnamePartEnde);		
		
		DatnamePart.compareTo(screenEnde);
		
		if(DatnamePartEnde.equals(screenEnde)) {
			DatnamePartEnde = DatnamePartEnde.substring(0, DatnamePartEnde.length());				
			System.out.println("Die gewünschte Zeichenkette ist: " + DatnamePartEnde);				
		}
		else {
			System.out.println("Die gewünschte Zeichenkette konnte nicht gefunden werden! (" + DatnamePart + ")");
		}

// Stelle für den Code zur Hochnummerierung ...
			
	}	
}

Für mögliche Lösung wäre ich sehr dankbar!
 

mikachu

Top Contributor
Hi,
du nimmst dir einfach den String mit dem Dateinamen ohne Endung und hängst eine Zahl dran.

Pseudocode:
Code:
für i von 0 bis einschließlich 10
{
    Dateiname = Dateiname_ohne_Endung + "_" + i + Endung
    gib Dateiname auf Konsole aus
}

#edit
wenn man eine Zahl an einen String anhängen will, kann man einfach schreiben
String = String + Zahl
 

Dexta

Mitglied
Ok, erstmal danke für die schnelle Antwort. Das hab ich mal gerade total vercheckt.

Code:
for (int i = 0; i < 11; i++) {
			String neuerDatName = DatnamePart + "_" + i + DatnamePartEnde; 
			System.out.println(neuerDatName);
		}

Im eigentlich war aber mein Anliegen ein ganz anderes, nur in dem ganzen Rumprobieren hab ich das wesentliche
schon wieder vergessen, was eigentlich am Ende bei herauskommen soll.

Denn jetzt geht es tatsächlich um Screenshots machen. Das funktionert auch gut und er speichert die Datei auch auf den vorgegeben Pfad ab. Aber jetzt stell ich mir folgendes Szenario vor. Was ist, wenn der zweite Screenshot, der abgespeichert werden, ebenfalls heißt wie der erste Screenshot. Er darf dann natürlich nicht einfach überschrieben werden!

Also muss überprüft werden, bevor der zweite Screenshot geschrieben wird, ob ein vorhandener Screenshot in diesem Pfad schon so heißt.

Jetzt weiß ich leider nur nicht, wie die oben schon angesprochene Schleife so implementiert werden soll,
das bei einen doppelt vorkommenden Dateinamen am Ende (vor dem ".jpeg") um eine Nummer hochgezählt werden soll.

In dem unten genannten Code ist natürlich jetzt das Problem, dass die Datei 10mal geschrieben wird, und bei einem zweiten Durchlauf die bestehende Datei ebenfalls wieder 10mal überschrieben wird... (Zeile 55)

Wie geh ich jetzt am besten die Lösung an?

Code:
public class TakeScreenshot implements ITakeScreenshot {
	
	private String outFileName;
	
	public String doCapture() throws IOException {	
		
		String screenPfad = "C:\\Temp\\";
		String screenName = getCurFileName();
		String screenEnde = ".jpeg";		
		String DatnamePart = "";
		
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();
		Rectangle screenRect = new Rectangle(screenSize);
		
		int scPos = screenName.indexOf(".");		
		String saParts[] = screenName.split("\\.");
		
		if (saParts.length == 1){
			return null;
		}		
		
		// Schleife zum zum generieren der Zeichen bis zum "."
		for (int i = 0; i < saParts.length -1; i++){
			DatnamePart = DatnamePart.concat(saParts[i]);
//			DatnamePart = DatnamePart.concat(".");
		}
						
//		Erstellt neuen String für die Ausgabe der Dateiendung
		String DatnamePartEnde = "." + saParts[1];
		
		DatnamePartEnde.compareTo(screenEnde);
		DatnamePart.compareTo(screenName);
		
		System.out.println(DatnamePart);
		
		Robot robot = null;
		
		try { robot = new Robot();} 		
		catch (AWTException e) {e.printStackTrace();}
		
		// Screenshot wird gemacht vom aktuellen Oberflächenzustand...
		BufferedImage image = robot.createScreenCapture(screenRect);	
	
		 // Beginn der Schleifen zur Überprüfung der richtigen Dateinendung und doppelt
		// vorkommenden Dateinamen...

		if(DatnamePartEnde.equals(screenEnde)) {
			DatnamePartEnde = DatnamePartEnde.substring(0, DatnamePartEnde.length());				
			System.out.println("Die gewünschte Zeichenkette ist: " + DatnamePartEnde);
			
			if(outFileName.equals(screenName)) {
				for (int i = 0; i < 11; i++) {
// Schleife zum hochnummerien falls Dateiname doppelt....	
					DatnamePart = DatnamePart.substring(0, DatnamePart.length());
					ImageIO.write(image, "jpeg", new File(DatnamePart + "_" + i + DatnamePartEnde));
					System.out.println("Selber Dateiname ist vorhanden. Datei wird umbenannt und hochnummeriert");
					}
				}
			else {				
				ImageIO.write(image, "jpeg", new File(screenName));
				System.out.println("Datei ist nicht vorhanden und wird neu angelegt");								
				}
			}
			else {
				System.out.println("Die gewünschte Zeichenkette konnte nicht gefunden werden! (" + DatnamePart + ")");
				}
		
		return screenName;
		}

	// generiert das Datum + den Namen "Screenshot" der Datei
	private String getCurFileName() {
		
		Date heute;
		SimpleDateFormat Datumsformat;		
		heute = new Date();
		Datumsformat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
		
		String datum = Datumsformat.format(heute);		
		String	outFileName = "Screenshot.jpeg";
		
// 		fügt dem Datum ein "_" sowie den Dateinamen "Screenshot.jpeg" hinzu
		datum = datum + "_";		
		datum = datum + this.outFileName;
		
		return outFileName;
	}	
	
	public TakeScreenshot(String FileName) {
		this.outFileName = FileName;
	}
}
			
interface ITakeScreenshot {
	public String doCapture() throws IOException;	
}

Die Methode getCurFileName() gibt absächlich den Wert outFileName zurück, da ich nur so das Szenario eines doppelt vorkommenden Namen testen kann. Normalerweise wird dort sonst datum stehen....

Ich hoffe mein Anliegen ist verständlich rübergebracht?
 

Dexta

Mitglied
So, nochmal ne Ladung Gehirnschmalz verbraucht und da bin ich doch noch auf die Lösung gekommen. Wie schnell das manchmal doch noch klappen kann, obwohl man schon so lange daran getüfftelt hat...

Also, die Lösung zum Nummerieren...

Code:
int zaehler = 0;
		
		// Suche solange nach einem eindeutigen Dateinamen,
		// bis
		// entweder : zaehler ist größer 10
		// oder : eindeutiger Dateiname wurde gefunden
		while (zaehler < 11 && new File(DatnamePart + "_" + zaehler + DatnamePartEnde).exists()){
			zaehler++;
			System.out.println(DatnamePart + "_" + zaehler + DatnamePartEnde);
		}		
		if (zaehler == 11){
			return null;
		}
		
		String DatnameNeu = DatnamePart + "_" + zaehler + DatnamePartEnde;
		
		// Datei schreiben und Dateinamen zurückgeben		
		// Beginn der Schleifen zur Überprüfung der richtigen Dateinendung und doppelt
		// vorkommenden Dateinamen...
		if(DatnamePartEnde.equals(screenEnde)) {
			DatnamePartEnde = DatnamePartEnde.substring(0, DatnamePartEnde.length());				
			System.out.println("Die gewünschte Zeichenkette ist: " + DatnamePartEnde);
			
			if (zaehler != 11) {
				ImageIO.write(image, "jpeg", new File(DatnamePart + "_" + zaehler + DatnamePartEnde));
				System.out.println("Selber Dateiname ist vorhanden. Datei wird umbenannt und hochnummeriert");				
			}
			else {				
				ImageIO.write(image, "jpeg", new File(screenName));
				System.out.println("Datei ist nicht vorhanden und wird neu angelegt");								
			}	
		}		
		else {
			System.out.println("Die gewünschte Zeichenkette konnte nicht gefunden werden! (" + DatnamePart + ")");
		}
		return DatnameNeu;

greetz Dexta
 

mikachu

Top Contributor
Siehste :wink:, selber nachdenken löst doch auch Probleme ^^.

Aber noch nen anderer Gedankenansatz.
Im Konstruktor, oder beim initialisieren, kannst du ja die schon höchste Laufnummer für Dateien ermitteln, falls schon Dateien existieren.

Somit könntest du dir wieder ein paar if's sparen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
T Bezeichnung eines Objektes mit String/int kombinieren Allgemeine Java-Themen 3
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
R Instanzen eines Programms Allgemeine Java-Themen 8
I Arbeitsmaterialien eines Softwareentwicklers? Allgemeine Java-Themen 7
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
C Best Practice Tiefe Kopie eines Arrays unbekannter Dimension und unbekannten Typs Allgemeine Java-Themen 4
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
C Methode für tiefe Kopie eines unbekannt (dimensionierten & typisierten) Feldes realisierbar? Allgemeine Java-Themen 7
M final vor dem parameter eines Konstruktors Allgemeine Java-Themen 1
B Hintergrundbild eines JFrames? Allgemeine Java-Themen 3
L Winkel eines Vektors berechnen [Anfängerprob] Allgemeine Java-Themen 5
Fab1 Komponenten eines zweiten Java Programms auslesen Allgemeine Java-Themen 8
G Mit Java auf die Konsole eines Process-Objekts zugreifen Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben