Suchen und ersetzten mit \ ?

BuffaloBill

Mitglied
Hallo Zusammen
Ich programmiere hier einen kleinen installer in Java, und bleib bei dem Fenster stecken, wo der User seinen Installationpfad eingeben soll. Die Pfade werden ja meist so angegeben:
C:\MylocalPath\MylocalFolder

Wenn der User das eingibt, dann wird das dahinter erstmal in einem String (input) zwischen gespeichert, wo dann erstmal "C:\MylocalPath\MylocalFolder" drin steht. Jetzt \ ist ja eigentlich das ausfallzeichen, was die Sache etwas komplizierter macht. Eigentlich sollte ich jetzt ja eine File Variable haben, denn der Installer muss ja andere Files dahinkopieren ect. Wenn ich File Variablen definiert habe, dann hab ich das bisher immer so gemacht:

Java:
File demo = new File ("C:\\MylocalPath\\MylocalFolder");
Also muss ich ja jetzt die \ im String verdoppeln, also hab ich
Java:
input.replace("\\", "\\\\");
File installfolder = new File (input);
gemacht -aber irgendwie funktioniert das nicht, irgendetwas fundamentales muss ich übersehen. Any hint?
 

faetzminator

Gesperrter Benutzer
Nein, du musst keine doppelten Backslashes einfügen. Diese sind nur wegen des Escapezeichens [c]\[/c] im Source Code von Javaprogrammen notwending.

Edit:
1. sind Strings immutable, Methoden wie [c]replaceAll()[/c] liefern einen neuen String zurück, den du zuweisen musst: [c]someString = someString.replaceAll("xy", "z");[/c]
2. es gibt in String keine Methode [c]replace(String, String)[/c]
3. es gibt in String eine Methode [c]replaceAll(String, String)[/c], die einen Regex entgegen nimmt. Entweder würdest du da [c]replaceAll(Pattern.quote("\\"), "\\\\")[/c] oder [c]replaceAll("\\\\", "\\\\")[/c] verwenden müssen
 
Zuletzt bearbeitet:

xehpuk

Top Contributor
Die Lösung des eigentlichen Problems wurde bereits genannt: Du hast gar keins. ;)

Ansonsten …

2. es gibt in String keine Methode [c]replace(String, String)[/c]
Die Aussage an sich mag zwar richtig sein, jedoch geht
Code:
String.replace(String, String)
, weil:
[JAPI]java.lang.String#replace(java.lang.CharSequence, java.lang.CharSequence)[/JAPI]
public final class String implements Serializable, Comparable<String>, CharSequence
Also wenn man Strings in Strings ersetzen will, immer diese Methode verwenden. Die Regex-Methode ist hier Quatsch und sorgt schnell für Fehler, wenn man sich nicht genau die Doku anschaut … :rtfm:

3. es gibt in String eine Methode [c]replaceAll(String, String)[/c], die einen Regex entgegen nimmt. Entweder würdest du da [c]replaceAll(Pattern.quote("\\"), "\\\\")[/c] oder [c]replaceAll("\\\\", "\\\\")[/c] verwenden müssen
Java:
public class Main {
	public static void main(String... args) {
		String s = "Hello\\World";
		System.out.println(s);
		System.out.println(s.replace("\\", "\\\\"));
		System.out.println(s.replaceAll("\\\\", "\\\\"));
	}
}
Code:
Hello\World
Hello\\World
Hello\World
Oops, was ist passiert? :shock:

[JAPI]java.lang.String#replaceAll(java.lang.String, java.lang.String)[/JAPI]
Aha, als zweiten Parameter erwartet die Methode einen sogenannten "replacement string" und keinen "normalen". Dieser interpretiert den Backslash ebenfalls als Metazeichen. :eek:

Let me fix it for you:
Java:
import java.util.regex.*;

public class Main {
	public static void main(String... args) {
		String s = "Hello\\World";
		System.out.println(s);
		System.out.println(s.replaceAll("\\\\", "\\\\\\\\"));
		System.out.println(s.replaceAll(Pattern.quote("\\"), Matcher.quoteReplacement("\\\\")));
	}
}
Code:
Hello\World
Hello\\World
Hello\\World
 

irgendjemand

Top Contributor
Krass, da bin ich noch an 1.4 gewöhnt :oops:

Und gleich noch ein Fehler, shame on me ;)

das solltest du dringend ändern ... denn 1.4.x wird seit dem release von 6 offiziell nicht mehr supported ... und auch 5.0 ist seit dem final release von 7 auch nur noch als long-time-service verfügbar ...

ergo : mindestens 6 solltest du dir schon angewöhnen ...

btw : wenn du noch an 1.4.x gewöhnt bist ... kennst du dann überhaupt generics ... welche ja erst mit 5.0 eingeführt wurden ?
 

faetzminator

Gesperrter Benutzer
irgendjemand, danke, dein erstes Ohrrauschen an mich ;) Irgendwann musste der Tag kommen...

Ich kenne Generics, weil wir produktiv auf 5 arbeiten!? Aber natürlich kenne ich nicht jede hinzugefügte Methode pro Release. Deiner Meinung nach braucht man demnach [c]String.replace(CharSequence, CharSequence)[/c] täglich, so dass man es wissen sollte. Das lässt mich auf über-String-Verwendung schliessen, wie ich es schon oft in (Web)projekten gesehen hab (ist ja klar, lieber alles immer als String verwalten, wenns schon so rein kommt und wieder raus geht :bahnhof:).
 

irgendjemand

Top Contributor
ähm ... ich sags mal so : String.replace(CharSequence, CharSequence) sollte man alleine aus dem grund kennen da man sich damit das lästige arbeiten mit RegEx erspart ...

z.b. kannst du in replace "." dierekt verwenden ... ohne es wie in replaceAll maskieren zu müssen *um jetzt mal ein dierektes beispiel zu geben*


ansonsten : mir persönlich kann es egal sein ob jemand auf 1.3.x , 1.4.x oder 5.0 kleben geblieben ist ... ich persönlich verwende ausschließlich J7 *atm u4-ea* ... und wer meine software nutzen will muss sich das wohl oder übel ebenfalls zulegen ...

zum "versions-chaos" habe ich ja bereits mehrfach meinen senf gelassen ... aber fakt : wer nicht updated und sich damit den neuen sprach-features *wie z.b. NIO.2* verweigert ist selbst schuld ...
 

faetzminator

Gesperrter Benutzer
[...] sollte man alleine aus dem grund kennen da man sich damit das lästige arbeiten mit RegEx erspart ...
Ah, wusste ich gar nicht. 90% der Stringmodifikationen erledige ich mit Regex.

z.b. kannst du in replace "." dierekt verwenden ... ohne es wie in replaceAll maskieren zu müssen
Nein, echt? War mir nicht bewusst :roll:


[...] kleben geblieben ist
Nur weil man nicht alle Methoden auswendig kennt, ist man stehen geblieben? Vor allem, wenn ich gar keinen Bedarf für diese Methode hab. Interessant.
ich persönlich verwende ausschließlich J7 *atm u4-ea* ... und wer meine software nutzen will muss sich das wohl oder übel ebenfalls zulegen ...
1. Ich kann nicht entscheiden, was für eine Version produktiv läuft
2. Unsere Kunden benötigen kein Java, da wir Webapps entwickeln
3. Schön für dich

zum "versions-chaos" habe ich ja bereits mehrfach meinen senf gelassen ... aber fakt : wer nicht updated und sich damit den neuen sprach-features *wie z.b. NIO.2* verweigert ist selbst schuld ...
1. Ich verweigere sie nicht.
2. Eine zusätzliche Methode ist IMHO kein Sprachfeature (also eigentlich ist auch NIO2 in meinen Augen kein Feature, wenn man die nativen Aspekte ausser acht lässt).
 

irgendjemand

Top Contributor
Ah, wusste ich gar nicht. 90% der Stringmodifikationen erledige ich mit Regex.
schön ... wer sich so gut mit RegEx auskennt solls auch gerne verwenden
Nein, echt? War mir nicht bewusst :roll:
es ist mir egal ob DU das weist ... es geht darum das es die meisten anfänger eben NICHT wissen und sich dann wundern warum [c]replaceAll(".", "..")[/c] falsche ergebnisse liefert
Nur weil man nicht alle Methoden auswendig kennt, ist man stehen geblieben? Vor allem, wenn ich gar keinen Bedarf für diese Methode hab. Interessant.
jo ... dreh mir meine worte noch im mund um ... sorry ... aber wenn du meine posts nicht verstanden hast dann für dich mal die "old-school" variante : da sehr viele immer noch alte versionen nutzen ... wissen diesen entweder nichts von den neuen ... sind zu faul / dumm ... oder fahren nach "bleib beim alten" ....
wirklich ... wer vorsätzlich ALTE versionen verwendet ... der ist für mich einfach nur "kleben geblieben"
*genau wie diese phreaks auf ihren s***** drogen*
1. Ich kann nicht entscheiden, was für eine Version produktiv läuft
NEIN ... kannst du nicht ? erlich ... wo ist es SO SCHWER zum verantwortlichen zu gehen ... mal alle 5 aufn tisch zu metern und zu sagen : "kugg ma ... da gibbet was neues und besseres als das was wir haben -> steigert unsere produktivität"
wenn du kein mitspracherecht in deinem laden hast ... dann tut es mir leid für dich das du so dumm warst dich überhaupt darauf einzulassen ... da hätte ich noch nicht mal den vertrag unterschrieben
 

faetzminator

Gesperrter Benutzer
Ok, ok, aber nach dem ersten Fehler sieht der Anfänger in der Javadoc, dass es einen Regex parst :) aber ansonsten müsste die Methode [c]replaceAllWithRegex()[/c] o.ä. heissen, das wär doch auch grausig? Ok, man könnte auch ein Pattern als Input erwarten.

Das Problem ist, dass ich bei der Arbeit 42h/w arbeite und somit vielen 1.4 Code bearbeiten muss (inzwischen sind wir wie gesagt auf Java 5), aber dass ich halt auch nicht jedes Detail mitbekomm. Privat verwend ich selbstverständlich (noch) Java 6. Sobald Java 7 im Repo ist, werd ichs auch verwenden. Aber privat arbeite ich natürlich wesentlich weniger mit Java.

Nein, ich kann nicht zu einem Verantwortlichen gehen. Wir sind ein Finanzinstitut mit >60k Mitarbeiter, und dort gehts nunmal 1-2 Jahre, bis man eine neue Version produktiv schalten kann. Stell dir vor, du könntest plötzlich keine Zahlungen mehr tätigen, weil die IT von heute auf morgen die Java-Version überall updated. Die Umstellung von J1.4 auf J5 (und Websphere 5.1 auf 6.1) zeigte tatsächlich, dass es man an einigen Stellen noch etwas verändern musste. So hatt sich AFAIR das Verhalten von [c]BigInteger.toString()[/c] verändert, so dass man danach [c]BigInteger.toPlainString()[/c] aufrufen musste.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L String suchen und ersetzten, ohne neue Datei Java Basics - Anfänger-Themen 4
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I String nach Wort suchen Java Basics - Anfänger-Themen 6
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
B Java Mail: suchen von mehreren Emailadressen Java Basics - Anfänger-Themen 5
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
B Suchen und sortieren Java Basics - Anfänger-Themen 10
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
A Erste Schritte Buchstaben im Array suchen Java Basics - Anfänger-Themen 8
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
S Wort suchen und ersetzen in einer Datei Java Basics - Anfänger-Themen 6
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
C In ArrayList suchen Java Basics - Anfänger-Themen 6
G nach 9 - stelliger Nummer suchen Java Basics - Anfänger-Themen 7
D Liste nach 2 gleichen Einträgen suchen Java Basics - Anfänger-Themen 4
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
C char in String suchen und durch anderen String ersetzen Java Basics - Anfänger-Themen 2
Y Explizites Suchen Java Basics - Anfänger-Themen 13
G Zeichen suchen und Ausgeben. Java Basics - Anfänger-Themen 3
K String in String-Array suchen Java Basics - Anfänger-Themen 11
T Suchen in sortiertem Feld Java Basics - Anfänger-Themen 2
K Im String Array suchen Java Basics - Anfänger-Themen 8
E Belebeste Area im Game of Life suchen Java Basics - Anfänger-Themen 0
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
L Name im Array suchen Java Basics - Anfänger-Themen 12
I Innerhalb einer Methode suchen und hinzufügen. Neues Objekt in Suche dann? Java Basics - Anfänger-Themen 8
F Methoden Kontaktliste - String in einem Array suchen und ausgeben Java Basics - Anfänger-Themen 3
A Suchen und ersetzen Java Basics - Anfänger-Themen 13
P Teilstring suchen Java Basics - Anfänger-Themen 3
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
D String in Datei suchen und löschen Java Basics - Anfänger-Themen 2
A Nach dem Objekt suchen Java Basics - Anfänger-Themen 1
F In einem String nach einem String suchen und Zeichen danach ausgeben Java Basics - Anfänger-Themen 6
K Maximum Suchen Array Java Basics - Anfänger-Themen 6
W .txt auslesen und nach schlüsselbegriffen suchen Java Basics - Anfänger-Themen 7
S Suchen in Arrays Java Basics - Anfänger-Themen 7
J Input/Output String Suchen und Ersetzen Java Basics - Anfänger-Themen 8
A Kleinste Ziffer im Array suchen um Sortierung zu erzeugen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
T String in Array suchen Java Basics - Anfänger-Themen 9
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
B Nach regulären Ausdrücken suchen Java Basics - Anfänger-Themen 14
C Bestimmte Informationen von Webseite suchen Java Basics - Anfänger-Themen 13
A String in String suchen Java Basics - Anfänger-Themen 3
J Nach einem Wert suchen +/- x Java Basics - Anfänger-Themen 8
D Binäres Suchen Java Basics - Anfänger-Themen 11
N Weg suchen bei Adjazenzmatrix Java Basics - Anfänger-Themen 2
E Suchen mit Hashfunktion ?! Java Basics - Anfänger-Themen 7
C Binäres Suchen mit Rekursion Java Basics - Anfänger-Themen 5
I Erste Schritte Ein Zeichen in einem Array Suchen Java Basics - Anfänger-Themen 8
N Binär suchen: Java Basics - Anfänger-Themen 4
D In Hashtable suchen Java Basics - Anfänger-Themen 3
J In String suchen Java Basics - Anfänger-Themen 14
D Nach String "{" suchen Java Basics - Anfänger-Themen 4
3 3. Element mit regulären Ausdruck suchen Java Basics - Anfänger-Themen 12
M Notiz suchen-Programm Java Basics - Anfänger-Themen 3
F Zusammenhängend Komponente suchen(Graph) Java Basics - Anfänger-Themen 4
M Teilmatrix suchen Java Basics - Anfänger-Themen 16
B Java nach bestimmter dateiendung suchen Java Basics - Anfänger-Themen 6
B Element in Folge suchen Java Basics - Anfänger-Themen 7
T String aus einer ArrayList suchen Java Basics - Anfänger-Themen 7
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
R Datentypen In String nach String suchen und hinzufügen Java Basics - Anfänger-Themen 2
D Textdatei einlesen und darin suchen Java Basics - Anfänger-Themen 11
I Wie kann ich ein Wort in einem String suchen Java Basics - Anfänger-Themen 3
P char[] - suchen/ löschen Java Basics - Anfänger-Themen 6
S Datentypen In ArrayList nach Element suchen und Position ausgeben Java Basics - Anfänger-Themen 9
D Array Fehler / groesste Primzahl suchen Java Basics - Anfänger-Themen 4
C Objekt aus Liste suchen Java Basics - Anfänger-Themen 6
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
D In String suchen und extrahieren Java Basics - Anfänger-Themen 13
B Suchen nach Teilstring, um Text danach ausgeben Java Basics - Anfänger-Themen 11
H Höchsten int-Wert(key) aus einer Hashmap suchen Java Basics - Anfänger-Themen 19
J Feld in Tabelle suchen Java Basics - Anfänger-Themen 8
Developer_X Strings in JTextarea suchen Java Basics - Anfänger-Themen 15
F Datei suchen --> Pfad als String speichern Java Basics - Anfänger-Themen 8
R einen gegebenen String in einem String suchen Java Basics - Anfänger-Themen 6
J Suchen nach ArrayObjekten Java Basics - Anfänger-Themen 17
? Algo gleicher Buchstabe in 2 Wörtern suchen Java Basics - Anfänger-Themen 16
G String suchen Java Basics - Anfänger-Themen 4
X Attribut in n Objekten suchen Java Basics - Anfänger-Themen 8
G String in Array suchen Java Basics - Anfänger-Themen 6
G Texte innerhalb von Dateien suchen Java Basics - Anfänger-Themen 9
P Text in Verzeichnisse suchen Java Basics - Anfänger-Themen 4
-horn- String im String suchen, womit? Java Basics - Anfänger-Themen 2
G String Suchen ersetzen replace_all() Java Basics - Anfänger-Themen 6
G Nach Datum suchen. Java Basics - Anfänger-Themen 4
M Rekursives suchen im TreeMenu Java Basics - Anfänger-Themen 10
G In DefaultTreeModel suchen Java Basics - Anfänger-Themen 2
G BST Suchbäume kleinsten Wert suchen Java Basics - Anfänger-Themen 3
G Zeichenkette suchen in Vector-Klasse Java Basics - Anfänger-Themen 11
G Suchen in Map nach Schlüssel? Java Basics - Anfänger-Themen 2
G Methode in API suchen Java Basics - Anfänger-Themen 3
S Anzahl von Zeichen in einem String suchen und zählen Java Basics - Anfänger-Themen 1
R maximum in integer array suchen Java Basics - Anfänger-Themen 29
X Suchen mit Filterfunktion, Platzhalter etc. Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben