Zauberrei mit String oder wo kommt das "\n" her...
-
Man nehme folgende Klasse:
Public class test{ public String pfad = null; public Image image = null; public test(String val){ // val Beispiel: "abcd ; C:/Dummy/test.png\n" // wers noch nich weiss: \n = Zeilenumbruch // dateipfad aus gegebenen string auslesen: pfad = val.substring(val.indexOf(";")+2, val.length()-1); // theoretisch sieht pfad jetz so aus: "C:/Dummy/test.png" // nun image erzeugen aus datei: image = ImageIO.read(new File(pfad)); // hier wird lustig : Abbruch weil datei nich vorhanden bzw in dem // String is auf einmal wie durch Zauberhand ein "\n". Wie kommt // das dahin ???? (also pfad: "C:/Dummy/test.png\n") } } /*********************************/ /* Wenn ich mit einer dummyVariablen arbeit klappt alles, etwa so: */ Public class test{ public String pfad = null; public Image image = null; public test(String val){ // val Beispiel: "abcd ; C:/Dummy/test.png\n" // dateipfad aus gegebenen string auslesen: String dummy = val.substring(val.indexOf(";")+2, val.length()-1); pfad = dummy; // nun image erzeugen aus datei: image = ImageIO.read(new File(dummy)); } }
also, obiger code geht nich, der unten geht. kann mir bitte jemand versuchen zu erklären wie sich dieses "\n" in diesen String reinschleicht ? hat das was damit zu tun das die Variable public ist ? in allen meinen javabüchern steht das ein String nicht immer mit "\n" enden muss. ich vermute das irgendetwas aus was für gründen auch immer der meinung ist das an den String noch nen "\n" muss und den dann halt setzt. nur wo , wieso und warum ? hoffe einer weiss ne antwort. thx a lot.
pain
-
Lösung gefunden:
erstens hab im code unterschlagen das ich noch ne if abfrage habe:
if (screenPath.endsWith(".bmp") ....
als naive API nutzer bin ich davon ausgegangen das endWith wie deklariert nur einen boolean zurückgibt. Wie es jetzt scheint hängt dieses endsWith an den jeweiligen String noch ein "\n". hatte wer das problem schonmal ? is ja wo ne frechheit wenn bei ner einfachen true abfrage die werte manipuliert werden!!!
Vielleicht findet der eine oder andere was raus. interresiert mich ernsthaft, da es 1. nirgendwo deklariert ist (!!!) das java ohne mein wissen an den Strings rumfutsch, un mich das elend fast den ganze tag gekostet hat (bin erst durch zufall bei debuggen draufgekommen). lasst uns das lätzel rösen
pain
ps: hab grad noch endeckt das ein "\n" auch angehangen wird wenn man einen sttring übergibt/zuweist. entweder steht in meinen büchern mist oder ich hab grad nen bug in 1.4.2 gefunden
-
kann mir bitte jemand versuchen zu erklären wie sich dieses "\n" in diesen String reinschleicht ?
Vermutlich, weil du den String per Tastatureingabe einliest, wo man die Eingabe mit einem Return beendet.
-
ne, lese und schreibe die daten direkt im prog. return fällt raus.
-
Wenn du einer Funktion einen String übergibst, kann diese den String nicht ändern. Das ist (technisch) unmöglich, da Strings immutable sind.
-
der meinung war ich bis heute auch. probiers aus und staune(jdk 1.4.2)...
ich blick noch nich so recht wer da wo wen wie umbügelt, tatsache is aber das der fertig geparste String von irgendwem nen "\n" angehängt bekommt. ich blicks zwar immer noch nicht so recht, aber hab jetz erstmal umgebaut (siehe 2. variante) und da gehts bei sonst gleichen code. und von der verarbeitung sind die Quellcodes defakto identisch. schaun wir mal.pain
-
Hmmmm ich kanns dir leider nicht abnehmen. :p
Außer du schaffst es, ne Funktion zu schreiben, die nen übergebenen String ändert.
Vielleicht solltest du den Debugger nochmal anwerfen? Das '\n' kommt garantiert gleich beim Erstellen des Strings dran (wie sollte es auch anders sein).
-
also wenn du's mir nicht glaubst dann schick ich dir gerne nen paar screenshots auf obiges beispiel gemünzt. wer da wo wie wast macht liegt für mich wie gesagt im dunkeln, aber der geparste string wird definitiv nochmal veränder.das das technisch im grunde nich geht is mir auch klar. es könnte doch aber durchaus sein das endsWith nen "\n" dranhängt um zu markeiren das der string halt zu ende ist ? what ever, lets wait&see
pain
-
Ok, kannst du mir nochmal genau den Aufruf zeigen, wo du den String übergibst und wo er danach was angehängt haben soll?
Ich habe folgendes geniales Programm geschrieben:public static void main(String[] args) { String x = "skduhfs.abc"; if (x.endsWith("abc")) ; System.out.print(x + "murks"); }
Ausgabe schrieb:
skduhfs.abcmurks
Also bei mir wird da nix angehängt, kein Zeilenumbruch oder ähnliches.
Hätte mich auch wirklich stark verwundert.