2011-01-07 7 views
2

Ich versuche, mehrere verschiedene Zeichen durch unterschiedliche Werte zu ersetzen. Zum Beispiel, wenn ich habe: #love hate dann möchte ich tun ist zurück %23love%20hateCodierung von URL-Strings mit regulärem Ausdruck

Ist es etwas mit Gruppen zu tun? Ich habe versucht, Gruppen zu verstehen, aber ich habe es wirklich nicht verstanden.

Antwort

6

können Sie versuchen, dies zu tun:

String encodedstring = URLEncoder.encode("#love hate","UTF-8"); 

Es Sie das gewünschte Ergebnis erhalten. Um revers es sollten Sie dies tun:

String loveHate = URLDecoder.decode(encodedstring); 
+0

Wie habe ich das vermisst! :) – adarshr

+0

Danke das ist genau das, was ich brauchte =) mögest du viele Kinder haben und in Wohlstand leben – BeginnerPro

3

Sie brauchen RegEx nicht, um einzelne Zeichen zu ersetzen. RegEx ist ein Overkill für solche Zwecke. Sie können einfach die plain replace-Methode der String-Klasse in einer Schleife für jedes Zeichen verwenden, das Sie ersetzen möchten.

String output = input.replace("#", "%23"); 
output = output.replace(" ", "%20"); 

Wie viele solcher Zeichen möchten Sie ersetzen?

+0

Vielen Dank für die Antwort, nun, ich muss möglicherweise mehrere Zeichen repalce wie wenn ich: #i liebe dich dann die Ausgabe würde muss% 23i% 20love% 20you sein. und ich danke Ihnen, dass Sie es sich ansehen – BeginnerPro

+0

Np. Aber selbst solche Aussagen sind wesentlich effizienter als die Verwendung einer einzelnen RegEx-Kompilierung. – adarshr

1

Nein, Sie benötigen mehrere Ersetzungen. Eine weitere Option ist die Verwendung von group, um das nächste Vorkommen einer von mehreren Zeichenfolgen zu finden, zu prüfen, was die Zeichenfolge ist, und sie zu ersetzen, möglicherweise unter Verwendung einer Karte.

1

ich denke, was Sie erreichen wollen Art von URL-Codierung ist anstelle der reinen Ersatz.

siehe einige Antworten auf diesen Thread von SO, vor allem die mit 7 Stimmen, die für Sie interessanter sein könnte.

HTTP URL Address Encoding in Java

2

Wenn Sie versuchen, eine URL zu utf-8 oder eine Codierung mit bestehenden Klassen sein wird viel einfacher

zB zu kodieren.

commons-Httpclient Projekt

URIUtil.encodeWithinQuery(input,"UTF-8"); 
1

Wie Mat sagte, ist der beste Weg, dieses Problem zu lösen mit URLEncoder. Allerdings, wenn Sie darauf bestehen, regex, dann finden Sie in der Beispielcode in der Dokumentation zu java.util.regex.Matcher.appendReplacement:

Pattern p = Pattern.compile("cat"); 
Matcher m = p.matcher("one cat two cats in the yard"); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, "dog"); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

Innerhalb der Schleife können Sie m.group() sehen verwenden, welche Teilzeichenfolge abgestimmt und dann eine benutzerdefinierte Substitution tun auf dieser Grundlage. Diese Technik kann verwendet werden, um $ {Variablen} durch Nachschlagen in einer Karte usw. zu ersetzen.

Verwandte Themen