DeviantArt-Bild Konverter: Fehler..

oOJavaNeulingOo

Bekanntes Mitglied
Guten Morgen!

Ich wollte heute einen DeviantArt Bild Konverter erstellen, jedoch bekomme ich immer einen Fehler.. Egal welche BildURL ich eingebe, ich bekomme immer die Nachricht die ich in der catch abfrage angegeben habe!
Java:
public class adding {
	
	
	public static void main(String[] args) {
		new adding().add();
	}
	
	ArrayList<String> convertings = new ArrayList<String>();
	public  void add(){

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        System.out.println(MSG.input);

        
        try {
			String in = reader.readLine();
			if(!in.startsWith("exit")){
				convertings.add(in);
				output();
			}else{
				System.out.println(MSG.exit);
				System.exit(0);
			}
		} catch (Exception e) {
			System.out.println(MSG.error);
		}
	}
	
	public void output(){
		BufferedReader reader;
        reader = new BufferedReader(new InputStreamReader(System.in));
        String in = null;
        try {
        	System.out.println(MSG.convert);
			in = reader.readLine();
        }catch(Exception ee){
        }
		if(in.equalsIgnoreCase("convert")){
			for(String s : convertings){
				
				try{
				String autor		= s.split("_by_")[1].split("-")[0];
				String name			= s.split("_by_")[0].split("/")[s.split("_by_")[0].split("/").length - 1].replaceAll("_", " ");
					
				StringBuilder sb = new StringBuilder()
				.append("[spoiler= [url=").append(s).append("]").append(name).append("[/url]").append(" by ").append(autor).append("][img]").append(s).append("[/img][/spoiler]");
					
				System.out.println(sb.toString());
				convertings.remove(s);
				}catch(Exception e){
					System.out.println(MSG.error);
				}
			}
			add();
		}else{
			add();
		}
	}

}

class MSG {

	public static String
	input 		= "Zu konvertierender String: ",
	convert		= "Konvertieren? Tippe \"convert\", um alle gespeicherten Strings zu konvertieren.",
	error 		= "Fehler beim einlesen!",
	exit		= "Programm beendet!";
}
 
Zuletzt bearbeitet von einem Moderator:
Ohne das nachvollzogen zu haben: Stell' die Frage nochmal, vielleicht in der Form
Java:
String derDaAufMagischeArtZusammengebautWird = "Genau der String";
machWasMitDemString(derDaAufMagischeArtZusammengebautWird);
Bisher erkennt man da nur übelstes String-Gewurstel :autsch:
 
Okay, ich probiere es mal 😀

Also, das Programm soll DeviantArt-Bild-URL's, wie zB diese hier:
http://fc09.deviantart.net/fs34/i/2008/298/7/8/DeviantART_Wallpaper_by_kalmee.png
zu einem Foren-Code konvertieren.

Bei start des Programmes wird ein Input ausgefragt, welcher eben dieser Link ist, und wird in ne arraylist eingefügt. Dann wird die methode "output" aufgerufen welche alle strings in der arraylist konvertieren soll.

Aufbau des Links: http://fc09.deviantart.net/fs34/i/2008/298/7/8/DeviantART_Wallpaper_by_kalmee.png

x: Unwichtig
x: Bild-Name
x: Autor-Name


Code:
String autor        = s.split("_by_")[1].split("-")[0]; // Splittet den String in zwei teile - den nach dem "_by_" und den davor. Der String nach dem by wird nochmal mit "-" gesplittet, da da der autorname aufhört. Dies gibt den Autornamen

String name         = s.split("_by_")[0].split("/")[s.split("_by_")[0].split("/").length - 1].replaceAll("_", " ");//Splittet den String auch mit dem "_by_", nimmt jedoch den ersten teil, und löscht alles "unwichtige" weg, ersetzt zudem die "_" mit einer leertaste, für die formatierung.
                    
                StringBuilder sb = new StringBuilder()
                .append("[spoiler= [url=").append(s).append("]").append(name).append("[/url]").append(" by ").append(autor).append("][img]").append(s).append("[/img][/spoiler]");//Erstellt den forencode - spoiler, bildname als link zum bild, dann autorname, dann image tags und nochmal der link

Verständlicher 😀 ?
 
Wie gesagt, da wird "irgendein" String (sehr kompliziert) in "irgendeinen" anderen String umgebaut. Stimmt der String, der am Ende rauskommt? Wenn nein: Well, there's your problem. Wenn ja: Was ist dann das Problem?
 
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at adding.output(adding.java:48)
at adding.add(adding.java:26)
at adding.main(adding.java:11)

Das ist der Fehler 🙁
 
Okay, mach ich gleich - Vorerst noch eine Frage: Wieso zum Teufel will er mir den String "irgendetwas.png" nicht mit einem . splitten? Der tut gerade so, als ob kein Punkt vorhanden wäre! (ArrayOutOfBounds) - Beim ausgeben jedoch erscheint der punkt -.-
Code:
String png			= s.split("_by_")[1].split("-")[1];
String link			= png.split(".")[0];

Der Punkt ist GANZ SICHER vorhanden...
 
Funktioniert, vielen Dank!!

Hier das formatierte:
Error:
Code:
java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
	at java.util.AbstractList$Itr.next(Unknown Source)
	at adding.output(adding.java:48)
	at adding.add(adding.java:26)
	at adding.main(adding.java:11)

Der Code mit den hervorgehobenen sachen:

Code:
package uni;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class adding {
	
	
	public static void main(String[] args) {
		new adding().add();
	}
	
	ArrayList<String> convertings = new ArrayList<String>();
	public  void add(){

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        System.out.println(MSG.input);

        
        try {
			String in = reader.readLine();
			if(!in.startsWith("exit")){
				convertings.add(in);
				output();
			}else{
				System.out.println(MSG.exit);
				System.exit(0);
			}
		} catch (Exception e) {
			System.out.println(MSG.error);System.out.println("HHHHH");
			e.printStackTrace();
		}
	}
	
	public void output(){
		BufferedReader reader;
        reader = new BufferedReader(new InputStreamReader(System.in));
        String in = null;
        try {
        	System.out.println(MSG.convert);
			in = reader.readLine();
        }catch(Exception ee){
        	ee.printStackTrace();
        }
		if(in.equalsIgnoreCase("convert")){
			[COLOR="Red"]for(String s : convertings){[/COLOR] //LINIE 48!
				
				try{
				String autor		= s.split("_by_")[1].split("-")[0];
				String name			= s.split("_by_")[0].split("/")[s.split("_by_")[0].split("/").length - 1].replaceAll("_", " ");
				String png			= s.split("_by_")[1].split("-")[1];
				String link			= png.split("\\.")[0];
				StringBuilder sb = new StringBuilder()
				.append("[spoiler= [url=fav.me/").append(link).append("]").append(name).append("[/url]").append(" by ").append(autor).append("][img]").append(s).append("[/img][/spoiler]");
					
				System.out.println(sb.toString());
				convertings.remove(s);
				}catch(Exception e){
					System.out.println(MSG.error);e.printStackTrace();
				}
			}
			add();
		}else{
			add();
		}
	}

}

class MSG {

	public static String
	input 		= "Zu konvertierender String: ",
	convert		= "Konvertieren? Tippe \"convert\", um alle gespeicherten Strings zu konvertieren.",
	error 		= "Fehler beim einlesen!",
	exit		= "Programm beendet!";
}
Linie 16 und 11 sind einfach die Methoden-Tracker, also von der Main methode zur add methode und von da zur output methode ^^
 
java.util.ConcurrentModificationException kommt dann, wenn du eine Liste bearbeitest während du drüberiterierst.

Kopiere die Liste und iteriere über die Kopie, mach die Änderungen dann am Original.
 
Achso, vielen Dank! Ich probiere es sofort aus 🙂

EDIT:

ArrayList<String> al = convertings;
for(String s : al){

gibt den gleichen fehler 🙁
 
Zuletzt bearbeitet:
Du sollst die Liste kopieren, nicht einfach eine neue Referenz erzeugen:

[c]List<String> al = new ArrayList<String>(convertings);[/c]

Wenn du dir beim Schlüsseldienst die Haustürschlüssel nachmachen lässt, hast du auch kein zweites Haus, du musst schon ein neues (mit [c]new[/c]) "kaufen"...
 
Zuletzt bearbeitet:

Zurück
Oben